【Javascript语言精粹】笔记摘要
现在大部分编译语言中都流行要求强类型。其原理在于强类型允许编译器在编译时检测错误。我们能越早检测和修复错误,付出的代价越小。Javascript是一门弱类型的语言,所以Javascript编译器不能检测出类型错误。
NaN是一个数值,它表示一个不能产生正常结果的运算结果。NaN不等于任何值,包括它自己。可以用函数isNaN(number)检测NaN。
Infinity表示所有大于1.79769313486231570e+308的值。
/运算符可能会产生一个非整数结果,即使两个运算数都是整数。
对象字面量是一种可以方便地按指定规格创建新对象的表示法。
对象通过引用来传递。它们永远不会被复制。
Javascript中的函数就是对象。对象是“名/值”对的集合并拥有一个连到原型对象的隐藏连接。对象字面量产生的对象连接到Object.prototype。函数对象连接到Function.prototype(该原型对象本身连接到Object.prototype)。每个函数在创建时会附加两个隐藏属性:函数的上下文和实现函数行为的代码。
函数的变量不像普通的变量那样将被初始化为undefined,而是在该函数被调用时初始化为实际提供的参数的值。
调用一个函数会暂停当前函数的执行,传递控制权和参数给新函数。除了声明时定义的形式参数,每个函数还接收两个附加的参数:this和arguments。
参数this在面向对象编程中非常重要,它的值取决于调用的模式。
arguments并不是一个真正的函数。它只是一个“类似数组”的对象。arguments拥有一个length属性,但它没有任何数组的方法。
模块模式的一般形式是:一个定义了私有变量和函数的函数;利用闭包创建可以访问私有变量和函数的特权函数;最后返回这个特权函数,或者把它们保存到一个可访问的地方。
在大多数语言中,一个数组的所有元素都要求是相同的类型。Javascript允许数组包含任意混合类型的值。
每个数组都有一个length属性。和大多数其他语言不同,Javascript数组的length是没有上届的。如果用大于或等于当前length的数字作为下标来存储一个元素,那么length值会被增大以容纳新元素,不会发生数组越界错误。而把length设小将导致素有下标大于等于新length的属性被删除。
方法名 | 意义 |
array.concat(item...) |
concat方法产生一个新数组,它包含一份array的 浅复制并把一个或多个参数item附加在其后。如果参 数item是一个数组,那么它的每个元素会被分别添加。 与其功能类似的有array.push(item...) |
array.join(separator) |
join方法把一个array构造成一个字符串。它先把array 中的每个元素构造成一个字符串,接着用一个separator 分隔符把它们连接在一起。默认的separator是逗号。 |
array.pop() |
pop和push方法使得数组array可以像堆栈一样工作。pop方法移除array中 的最后一个元素并返回该元素。如果该array是empty,它会返回undefined。 |
array.push(item...) |
push方法把一个或多个参数item附加到一个数组的尾部。和contact方法 不同的是,它会修改array,如果参数item是一个数组,它会把参数数组 作为单个元素整个添加到数组中,并返回这个array的新长度值。 |
array.reverse() | reverse方法反转array里的元素的顺序,并返回array本身。 |
array.shift() |
shift方法移除数组array中的第1个元素并返回该元素。如果这个数 组array是空的,它返回undefined。 |
array.slice(start,end) |
slice方法对array中的一段做浅复制。首先复制array[start],一直 复制到array[end]为止。end参数是可选的,默认值是该数组的长度 array.length。 |
array.sort(comparefn) |
sort方法对array中的内容进行排序。它把要被排序的元素都视为字符串, 所以不能正确地给一组数字排序。 |
array.splice(start,deleteCount,item...) |
splice方法从array中移除一个或多个元素,并用新的item替换它们。 参数start是从数组array中移除元素的开始位置。参数deleteCount是 要移除的元素个数。如果有额外的参数,那些item会插入到被移除元 素的位置上。它返回一个包含被移除元素的数组。 |
array.unshift(item...) |
unshift方法像push方法一样,用于把元素添加到数组中,但它是 把item插入到array的开始部分而不是尾部。它返回array的新的length。 |
function.apply(thisArg,argArray) |
apply方法调用function,传递一个会被绑定到this上的对象和一个 可选的数组作为参数。 |
number.toExponential(fractionDigits) |
toExponential方法把这个number转换成一个指数形式的字符串。可 选参数fractionDigits控制其小数点后的数字位数。它的值必须在0~20。 |
number.toFiexed(fractionDigits) |
toFiexed方法把这个number转换成为一个十进制数形式的字符串。可 选参数fractionDigits控制其小数点后的数字位数。它的值必须在 0~20,默认为0。 |
number.toPrecision(precision) |
toPrecision方法把这个number转换成为一个十进制形式的字符串。可 选参数precision控制数字的精度。它的值必须在0~21。 |
number.toString(radix) |
toString方法把这个number转换成为一个字符串。可选参数radix控 制基数。它的值必须控制在2~36。默认的radix是以10为基数的。 |
object.hasOwnProperty(name) |
如果这个object包含一个名为name的属性,那么hasOwnProperty方法 返回true。原型链中的同名属性是不会被检查的。这个办法对name就 是“hasOwnProperty”时不起作用,此时会返回false。 |
regexp.exec(string) |
exec方法是使用正则表达式的最强大(和最慢)的方法。如果它成功地 匹配regexp和字符串string,它会返回一个数组。如果匹配失败,它会返回null。 |
regexp.test(string) |
test方法是使用正则表达式的最简单(和最快)的方法。如果该regexp 匹配string,它返回true;否则,它返回false。不要对这个方法使用g标识。 |
string.charAt(pos) |
charAt方法返回在string中pos位置处的字符。如果pos小于0或者大于等 于字符串的长度string.length,它会返回空字符串。Javascript没有字 符类型。这个方法返回的结果是一个字符串。 |
string.charCodeAt(pos) |
charCodeAt方法同charAt一样,只不过它返回的不是一个字符串,而是以 整数形式表示的在string中的pos位置处的字符的字符码位。如果pos小于 0或大于字符串的长度string.length,它返回NaN。 |
string.concat(string...) |
concat方法把其他的字符串连接在一起来构造一个新的字符串。它很少被 使用,因为用+运算符更为方便。 |
string.indexOf(searchString,position) |
indexOf方法在string内查找另一个字符串searchString。如果它被找到, 返回第1个匹配字符的位置,否则返回-1.可选参数position可设置从 string的某个指定位置开始查找。 |
string.lastIndexOf(searchString,position) |
lastIndexOf方法和indexOf方法类似,只不过它是从该字符串的末尾开始 查找而不是从开头。 |
string.localeCompare(that) |
localeCompare方法比较两个字符串。如果比较字符串的规则没有详细说明。 如果string比字符串that小,那么结果为负数。如果它们使相等的,那么 结果为0。这类似于array.sort比较函数的约定。 |
string.match(regexp) |
match方法让字符串和一个正则表达式进行匹配。它根据g表示来决定如何进 行匹配。如果没有g标识,那么调用string.match(regexp)的结果与调用 regexp.exec(string)的结果相同。如果regexp带有g标识,那么它生成一个 包含所有匹配(除捕获分组之外)的数组。 |
string.replace(searchValue,replaceValue) |
replace方法对string进行查找和替换操作,并返回一个新的字符串。参数 searchValue可以是一个字符串或一个正则表达式对象。如果它是一个字符串, 那么searchValue只会在第1次出现的地方被替换。如果searchValue是一个正 则表达式并且带有g标识,它会替换所有的匹配。如果没有带g标识,它会仅替 换第1个匹配。 |
string.search(regexp) |
search方法和indexOf方法类似,只是它接收一个正则表达式对象作为参数而 不是一个字符串。如果找到匹配,它返回第1个匹配的首字符位置,如果没有 找到匹配,则方法-1。此方法会忽略g标识,且没有position参数。 |
string.slice(start,end) |
slice方法复制string的一部分来构造一个新的字符串。如果start参数是负数, 它将与string.length相加。end参数是可选的,且默认值是string.length。 如果end参数是负数,那么它将与string.length相加。end参数等于要去的最 后一个字符的位置值加上1。要想得到从位置p开始的n个字符,就用 string.slice(p,p+n)。同类的方法有string.substring和array.slice。 |
string.split(separator,limit) |
split方法把这个string分割成片段来创建一个字符串数组。可选参数limit 可以限制被分割的片段数量。separator参数可以是一个字符串或一个正则表达式。 |
string.substring(start,end) | substring的用法和slice方法一样,只是它不能处理负数的参数。 |
string.toLocaleLowerCase() |
toLocaleLowerCase方法返回一个新字符串,它使用本地化的规则把这个 string中的所有字母转换为小写格式。这个方法主要用在土耳其语上。 |
string.toLocaleUpperCase() |
toLocaleUpperCase方法返回一个新字符串,它使用本地化的规则把这个 string中的所有字母转换为大写格式。这个方法主要用在土耳其语上。 |
string.toLowerCase() |
toLowerCase方法返回一个新的字符串,这个string中的所有字母都被转 换为小写格式。 |
string.toUpperCase() |
toUpperCase方法返回一个新的字符串,这个string中的所有字母都被转 换为大写格式。 |
string.fromCharCode(char...) | fromCharCode函数根据一串数字编码返回一个字符串。 |