我想这是在我总结 JavaScript 系列中最为需要注意的,最为重要的内容。你必须要去了解这些问题特性,才能准备好应对措施,这真的很重要。
全局变量的存在的确是带来了方便,但是我觉得 JavaScript 对于全局变量的依赖性已经到达一种恐怖的状态。如果某些全局变量的名称碰巧和子程序中的变量名称相同,那么它们就会相互冲突,可能导致程序无法执行,而且不好调试。
文章中定义了三种定义全局变量的方式,分别是:
工作中遇见的普遍的错误应该是第三种,这很普遍。
JavaScript 并没有实现作用域,因此代码块中声明的变量在包含此代码块的函数的任何位置都是可见的。
所以,声明变量最好的方式是每个函数的开头部分声明所有变量。
如果一个 return 语句返回一个值,这个值表达式的开始部分必须和 return 同一行。否则,比如
- return
- {
- status : "value"
- }
这明显返回是一个具有属性的对象。只需要将左括号和 return 同一行就避免了。
返回一个用于识别其运算数类型的字符串。
但是需要注意的是,比如 typeof null 返回的对象是 object 而不是 null,因此尽量不使用。
将字符串转化为整数。但是如果该字符串的第一个字符是 0,那么该字符串会基于八进制而不是十进制来求值,而且在八进制中,8 和 9 不是数字,所以参数为 "08" 或者 "09" 产生的结果都是 0;所以建议加上基数参数,不要省略掉。
NAN 是一个特殊定义的值,不是一个数字,但是
- typeof NaA === ='number'; // true
可以看出,typeof 无法辨别数字和 NaN,而且 NaN 也不等同于它自己。
判断一个值是否是数字的方法是
- var isNumber = function isNumber(value) {
- return typeof value ==== 'number' && isFinite(value);
- }
数组的监测:
- if(Object.prototype.toStrings.apply(my_value)) === '[Object Array]') {
- } //return true;
注意,参数列表 arguments 数组不是一个数组,它只是一个存着 length 成员属性的对象。
值 | 类型 |
---|---|
0 | Number |
NaN(非数字) | Number |
''(空字符串) | String |
false | Boolean |
null | Object |
undefined | Undefined |
表格里面的值全部都等同于假,但是它们是不可互换的,所以不要使用不安全的 ==,而是应该使用 ===。
还有这个表格里面最需要注意的应该是 NaN,null,undefined 等等。
注意,这是一个方法,而不是一个运算符,所以在任何对象中,它可能会被一个不同的函数甚至一个非函数的值所替换。比如说:
- obj.hasOwnProperty = null; //地雷
- //...使用
- obj.hasOwnProperty(...) //触碰地雷
注意,在 Object.prototype 中,包含着一个名为 constructor 的成员对象,它的值是一个成员对象,这个是默认的。
谨慎使用,这是一个传递字符串给编译器返回执行结果的函数。
我感觉这个因人而异,不过我喜欢加上括号。
JavaScript 没有整数类型,它只有双精度的浮点数。因此,位操作符把它们的数字运算数先转换成整数,接着执行运算,然后再转换回去。但由于语言的执行环境接触不到硬件,所以非常慢。
推荐以 function 表达式代替 function 语句。因为能够明确的表示这是一个包含一个函数值的变量。
- var foo = function() {
- };
尽量避免使用 new Boolean(true)或者 new Array 或者 new Object 等等这些类型的包装对象,没有必要,用 [],{} 等等就好。
在其它语言中,void 是一种类型,表示没有值,但是在 JavaScript 中,void 是一个运算符,它接受一个运算符并且返回 undefined。
来源: http://www.cnblogs.com/George1994/p/6441890.html