-
一个js的bug,理论上跟undefined一样返回的是相应的类型,但是并没有
- 在做undefined判断时候 要尽量避免直接判断
//不推荐: 原因是如果出于某种意外, b未定义(var声明),那么程序直接会报错
if(b){
XXX
}
//推荐的写法
if(typeof b =='undefined'){
XXXX
}
- 以上其实就是undefined(未定义) 和undeclared(未声明)的区别, 而js 中两者分的并不是很清楚。
数组
-
delete typeof 都是运算符, delete可以删除数组元素,但是length不会发生变化,只是删除了元素值
-
数组长度隐式变化
-
数组是特殊的对象,所以索引值也可以为非数字,但是并不记在length内
-
还有一点需要注意,那就是如果字符串键值可以被强转(这里的强转的只有数字字符串)成十进制数字的话,那么就会被当做数字索引来处理
-
有时候需要把类数组转成真正的数组,从而可以使用数组的各种方法, 其办法就是用数据工具函数如(indexOf/ concat /forEach 等等来实现,实现方法略不同),以下为数组的slice工具方法实现图
//es6中 var arr = Array.from(arguments) 也可以实现同样的功能
字符串
-
字符串某些部分和数组的确很相似,但它毕竟不是数组
- 数组的非变更方法可以借用给字符串来使用 比如 join,map
- 对于会变更数组原本值的方法,则不可用以上, 非要用,曲线方法就是字符串先转成数组,操作后再转回字符串
-
undefined并不等于false,但是!undefined却等于true (开发中碰到的问题);
数字
-
数字常亮也可以用Number的方法,不过需要注意个问题,如下图
对于43. 这个小数点会先被识别成数字常亮的一部分,然后才是对象属性访问运算符
- Number.isInteger(num) 来判断数字是否是一个整数
-
非严格模式下可以给undefined赋值,不会报错,但是无效的。
原因是null是个特殊关键字,而不是标识符,然而undefined 却是个标识符
-
NaN 是js中唯一一个不等于自身的值,用这个特点来检验数字是否有效
所以判断一个数字是否有效并不能用如下的办法, 需要用到isNaN, 但是给isNaN传入一个非数字参数后仍会返回true, 所以并不保险。