JavaScript语言精粹_糟粕
全局变量
JavaScript没有连接器(linker),所有的编译单元都载入一个公用的全局对象中。
一共有3种方式定义全局变量。
1. var foo = value;
2. window.foo = value;
3. foo = value;
这本来是为方便初学者而有意让变量在使用前无需声明,但忘记声明变量是一个非常普遍的错误,而JavaScript的策略是让那些忘记预先声明的变量成为全局变量,这导致查找bug非常困难。
作用域
JavaScript的语法来源于C,在大多数语言中,一般来说声明变量的最好的地方是在第一次用到它的地方。但JavaScript中没有块级作用域,所以更好的方式是在每个函数的开头部分声明所有变量。
自动插入分号
JavaScript有一个机制,它通过自动插入分号来修正有缺陷的程序,千万不要依靠它,它可能会掩盖更为严重的错误
比如:
return { status:true };
return{ status:true };
返回的是两种不同的结果,第一个:自动分号让它变成了undefined。第二个返回一个包含status成员元素的对象。
保留字
许多单纯被JavaScript保留,它们不能被用来命名变量或参数,当保留字被用作字面量的键值时,他们必须被引号括起来,它们不能被用在点表示法中,所以又是必须使用括号表示法。
Unicode
当设计JavaScript的时候,Unicode预计最多会有65536个字符,而从那以后它的容量慢慢增长到了拥有1百万个字符。
typeof
typeof运算符返回一个用于识别运算数类型的字符串。但是它无法区分数组和对象。
parseInt
它是一个将字符串转换为整数的函数,它在遇到非数字是会停止解析,所以parseInt("16")与parseInt("16 tons")产生相同的结果。
浮点数
二进制的浮点书不能正确地处理十进制的小数,因此0.1+0.2不等于0.3.这是JavaScript中最经常被报告的bug,而且它是遵循二进制浮点数算数标准(IEEE 754)而有意导致的结果。
但浮点数中的整数运算是精确的,所以小数表现出来的错误可以通过制定精度来避免。
NaN
它是IEEE 754中定义的一个特殊的数量值,它表示不是一个数字,尽管typeof NaN === ‘number’ //true.
该值可能会在试图将非数字形式的字符串转换为数字是产生。
伪数组
JavaScript中没有真正的数组,在JavaScript的数组中,不必给他们设置纬度,而且它们永远不会产生越界错误。
假值
0、NaN、‘’(空字符串)、false、null、undefined
hasOwnProperty
hasOwnProperty是一个方法,而不是一个运算符,所以在任何对象中,它可能会被一个不同的函数甚至一个非函数的值所替换。
对象
JavaScript的对象中没有真的空对象,他们可以从原型链中取得成员元素。