
获得徽章 0
- Es5.1规范中说“本规范中的运算法则所操纵的值均有相应的类型”。所以JS中所有的值都有一个对应的类型。当然这里的类型和强类型语言中的类型不一样。
JS中值的类型,对于developers或者SE来说,更像是一种值的内部特征,来定义值的行为,使其区别于别的值。
比如说我们每一种类型的值,他们的方法 属性都不会完全一样
函数是object的子类型,函数是可调用对象。函数也可以拥有属性,比如说length,表明它声明的参数个数
这里单独拿function出来说是因为用typeof来检测function的时候输出是function而不是object
对于其它对象类型的,比如数组,Date,正则什么的,用typeof都是输出object展开评论点赞 - 今天学习了typeof
在平常使用中,我们经常使用它来检查数据类型,返回一个类型的字符串值。目前ES6有8种数据类型,其中基础的数据类型有:Boolean, string,number,null,undefined,symbol,bigint。引用数据类型:object。
1.值得注意的一点是用typeof检测null,输出的是object。这个bug出现了将近20年 可能会一直存续,因为修复它,可能会产生更多bug哈哈哈哈。
那么我们怎么检测null呢,可以采用逻辑与进行条件复合(!a && typeof a === 'object')实现
2.typeof的第二个问题就是它无法区分undefined和undeclared。未定义和未声明,一个是声明了没赋值,属于只分配了变量内存,但是没存东西。另一个是内存都没分配。但用typeof去判断时,都是输出undefined。
3.针对typeof这个检查未声明变量不会报错的现象,称之为typeof的安全防范机制。
4.这个机制的应用。可以用来检测我们当前作用域的未声明变量。比如说当我们导入,或者cv别人的代码的时候。那么我们都会看别人的代码中的变量,我们自己有没有声明过,要是声明了,万一进行覆盖,冲突什么的就不好了。所以我们可以在导入的时候加一条比如 var weNeed = (typeof importVarName !== 'undefined')?existedVar:你要导入的那一堆;
所以安全防范机制也挺好用的哈哈展开赞过评论1