JavaScript 糟粕

最近经朋友推荐在阅读《JavaScript语言精粹》一书,阅读过后对作者的精辟理解我也是受益颇多,在此将作者在书后附录的JavaScript糟粕的一部分做一记录,也警示自己在今后的编程中去糟粕而引精华。

==运算符

JavaScript中有两组相等的运算符:===和!==、==和!=,两组运算符的区别在于===和!==只有两个运算数类型一直且拥有相等的值===才会返回true,!===返回fasle;而==和!=只有在两个运算数类型一致时才会做出正确判断,如果两个运算数为不同类型,他们则会试着去转换运算数的类型,以下的例子可以展现这一切:

'' == '0'        //false
0 == ''          //true
0 == '0'         //true

false == 'false'    //false
false == '0'        //true       

false == undefined    //false
false == null        //false
null == undefined    //true
' \t\r\n' == 0        //true

以上例子如果使用 === 则结果全部都是 false ,因此在编程中尽量使用 === 以保证运算结果准确无误;

 with 语句

JavaScript中的with语是用来快速访问对象的属性的,不幸的是他的结果可能有时不可预料,例如:

with(obj){
    a==b;
}

和下面的代码等同

if(obj.a === undifinde){
    a = obj.b ===undifinde ? b : obj.b
}else{
    obj.a = obj.b === undifinde ? b : obj.b
}

所以,他等于以下语句中的某一条

a = b;
a = obj.b;
obj.a = b;
obj.a = obj .b;

这样就不能通过阅读代码知道他的下一步会是什么,也就无法确信他会正确的做你想做的事情;

 eval 

eval 方法的作用是传递一个字符串给编译器,并执行其结果,如果你只到点语法,而不知道下标语法,你就可能回这样写:

eval("myValue=myObject."+myKey+";");

而不是这样写:

myValue=myObject[myKey];

这样写会使代码可读性很差,并且影响代码性能,因为它需要编译器编译;

缺少块语句

JavaScript没有块及作用域,在分割代码时,一块代码会包裹在一对花括号中,但是在这对花括号在单行语句时是可以省略的;这往往会造成代码块分割不明确;例如:

if(ok)
    t=true;

可能会变成:

if(ok)
    t=true;
    advance();

但是其本意却是

if(ok){
    t=true;
};
advance();

所以制定严格的规范要求始终使用代码块会使代码可读性更强;

位运算符

JavaScript与Java有着相同的一套位运算符,在Java里位运算符处理整数类型,JavaScript中没有整数类型,只有双精度的浮点数类型,因此位操作符把他们的数字运算符转换为整数,接着进行计算,然后再转换回去,在大多数语言中,这些位运算接近于硬件处理,但JavaScript的运行环境一般接触不到硬件,所以非常慢,JavaScript很少被用来做位运算;

Function语句对比Function表达式

JavaScript既有Function语句,又有Function表达式,他们看起来好像是相同的;下面的语句意思相同

function foo(){ ... };


var foo = function(){ ... }

虽然两句意思一样,但是第二句更能明确的表达foo是一个包含一个函数值得变量,要用好这门语言,理解函数就是数值是很重要的;

function语句解析时会声明提前,并不符合先声明后引用的原则,这回造成程序很混乱。

 

posted @ 2018-10-16 13:51  一捆铁树枝_james  阅读(45)  评论(0)    收藏  举报