js需要注意的几个点
原始(Primitive)类型
在js中,存在着6中原始值,分别是:undefined,null,string,number,boolean,在es6中新增了一种基本数据类型为symbol。
原始数据都为值类型,是没有函数可以调用的,比如undefined.toString()
‘1’.toString() 是可以使用的。其实在这种情况下,‘1’ 已经不是原始类型了,而是被强制转换成了 String 类型也就是对象类型,所以可以调用 toString 函数。
这里需要注意的是,null这个类型是属于原始数据类型,即使typeof输出的结果为Object。
其实这是js存在很久的bug,这只是 JS 存在的一个悠久 Bug。
在 JS 的最初版本中使用的是 32 位系统,为了性能考虑使用低位存储变量的类型信息,000 开头代表是对象,然而 null 表示为全零,所以将它错误的判断为 object 。虽然现在的内部类型判断代码已经改变了,但是对于这个 Bug 却是一直流传下来。
= = 与 = = =
想必大家都知道两个等号与三个等号的区别,两个等号代表值相等,三个等号判断类型与值是否都相等,其实在开发中除了null外,其他的都应该使用===进行判断,下面放出一些使用两个等号相等的特殊案例
100 == '100' ; // true
0 == ''; // true
0 == false; // true
false == ''; // true
null == undefined; // true
null === undefined //false
下面是使用null判断的实例
var obj = { x: 100 };
console.log(obj.a==null) //true
console.log(obj.a===undefined) //true
if语句的判断条件
在js中,if(condition){},条件语句的判断为最终为truly变量与falsely变量,什么为truly变量,什么又是falsely变量,下面我将举出一些特定的例子
!!0 === false;
!!false === false;
!!"" === false;
!!NaN === false;
!!undefined === false;
!!null === false;
逻辑判断语句
console.log(10 && 0 ) // 0
console.log('' || 'abc') // abc
console.log(!window.abc) // true
从上面的代码可以看出,使用&&运算时取第一个falsely变量的值,使用||运算时取第一个truly变量的值,使用&&运算时,当所有条件都为true时,返回最后一个,使用或运算时,当所有条件都为false时,也返回最后一个。