一、(避免)隐式类型转换
console.log(false == 0); //logs true;
console.log(false === 0); //logs false;
console.log("" == 0); //logs true;
console.log("" === 0); //logs false;
因此,比较值和表达式类型时,始终使用 === 和 !== 。
二、eval()
1. 容易出错,因此避免使用eval()。eval()接受任意的字符串,并当作javascript代码来处理。
2. 大部分情况下,给setInternal()和setTimeout(),以及Function()构造函数传递字符串时,与eval()是类似的。应该避免。
3. 在必须使用eval()的情况下,可以使用new Function()来代替,或者封装eval()调用到一个及时函数中去。
例1:
console.log(typeof a); //logs undefined
console.log(typeof b); //logs undefined
console.log(typeof c); //logs undefined
var string = "var a = 1; console.log(a);";
eval(string); //logs "1"
var string = "var b = 2; console.log(b);";
new Function(string); //logs "2"
var string = "var c = 3; console.log(c);";
(function(){
eval(string);
} ());
// logs "3"
console.log(typeof a); //logs number
console.log(typeof b); //logs undefined
console.log(typeof c); //logs undefined
例2:
(function() {
var local = 1;
eval("local = 3; console.log(local);"); //logs 3
console.log(typeof local); //logs number
} ());
(function() {
var local = 1;
Function("console.log(typeof local);") (); //logs undefined
} ());