js 细节总结
# js 细节总结 ## 作用域 javascript 没有提供块级作用域。更好的方式是在函数的开头部分声明所有变量。 ## 自动插入分号: javascript有一个机制,它试图通过自动插入分号来修正有缺损的程序。千万不要依靠它,它可能会掩盖更为严重的错误。 ```javascript return { status:true }; 这看起来是要返回一个包含status成员元素的对象。可是,自动插入分号让它变成了返回undefined. 自动插入分号导致程序被误解却没有任何警告提醒。如果把{ 放在上一行的尾部而不是下一行的头部就可以避免该问题:
return { status:true }; 保留字:
下面的单词在javascript 里被保留:
- abstract boolean break byte case catch char class const continue debugger default delete do double else enum export extends false final finally float for function
- goto if implements import in instanceof int interface long native new null
- package private protected public return short static super switch synchronized
- this throw throws transient true try typeof var volatile void while with
这些单词中的大多数并没有在语言中使用。它们不能被用来命名变量或参数。当保留字被用作对象字面量的键值时,它们必须被引号括起来。它们不能被用在点表示法中,所以有时必须使用括号表示法:
var method; //ok var class; //非法 object = {box: value}; //ok object = {case: value}; //非法 object = {'case': value}; //ok object.box = value; //ok object.case = value; //非法 object['case'] = value; //ok parseInt
它是一个将字符串转换为整数的函数。如果该字符串第一个字符是0,那么该字符将被基于八进制而不是十进制来求值。在八进制中,8和9不是数字,所以parseInt('08'); paseInt('09'); 产生的结果都是0,这个错误导致了程序解析日期和时间时出现问题。parseInt 可以接受一个基数作为参数,如此一来 parseInt('08',10); 结果为8。建议你总是提供这个基数参数。
+
+运算符可以用于加法运算或字符串连接。如果你打算用+ 去做加法运算,请确保两个运算数都是整数。否则,它会把两个运算数都转为字符串连接起来。
var a = 1; var b =2; var c = '0'; console.log(a + b); //3 console.log(a + c); //10 浮点数
二进制的浮点数不能正确地处理十进制的小数,因此 0.1 + 0.2 不等于 0.3 。幸运的是,浮点数中的整数运算是精确的,所以小数表现出来的错误可以通过指定精度来避免。
举例来说,美元可以通过乘以100 而全部转成美分,然后就可以准确地将美分相加。它们的和可以除以100来转换回美元。当人们计算货币时当然会期望得到精确的结果。
NaN
NaN === NaN; //false NaN != NaN; //true javascript 提供了一个isNaN函数可以辨别数字与NaN:
isNaN(NaN); //true isNaN(0); //false isNaN('oop'); //true isNaN('0'); //false 伪数组
javascript没有真正的数组。
typeof 运算符不能辨别数组和对象,要判断一个值是否为数组,你还须检查它的constructor属性。
if(my_value && typeof my_value === 'object' && my_value.constructor === Array) {......}