思虑良久,终于要动笔写“前端百题斩”了,虽然是百题斩,但目前仅“ js、浏览器和网络”部分就肯定了100个高能知识点。写该系列文章的初衷是“ 让每位前端工程师掌握高频知识点,为工做助力”。但愿朋友们关注公众号“ 执鸢者”,用知识武装本身的头脑。
typeof
是一个运算符,其有两种使用方式:(1)typeof(表达式)
;(2)typeof 变量名
;返回值是一个字符串,用来讲明变量的数据类型;因此能够用此来判断number
,string
,object
,boolean
,function
,undefined
,symbol
这七种类型,每种状况返回的内容以下表所示:
类型 | 结果 |
---|---|
String | 'string' |
Number | 'number' |
Boolean | 'boolean' |
Undefined | 'undefined' |
Object | 'object' |
function函数 | 'function' |
Symbol | 'symbol' |
typeof
方法虽然很好用,但该方法有必定的局限性: 对于对象、数组、null
返回的值是object
。好比typeof(window)
,typeof(document)
,typeof(null)
返回的值都是object
,这是为何呢?这就要从底层提及。js在底层存储变量的时候,会在变量的机器码的低位1-3位存储其类型信息:
000
:对象;010
:浮点数;100
:字符串;110
:布尔值;1
:整数;特例:javascript
(1)null
全部机器码均为0
前端
(2)undefined
:用 −2^30
整数来表示java
typeof
就是经过机器码判断类型,因为null的全部机器码均为0,该机器码和对象同样,所以直接被看成对象来看待,因此经过typeof
就不可以判断区分对象还有null
了。
说了这么多,尚未进行验证,下面就逐一验证一下:
// 字符串 console.log(typeof('lili')); // string // 数字 console.log(typeof(1)); // number // 布尔值 console.log(typeof(true)); // boolean // undefined console.log(typeof(undefined)); // undefined // 对象 console.log(typeof({})); // object // 数组 console.log(typeof([])); // object // null console.log(typeof(null)); // object // 函数 console.log(typeof(() => {})); // function // Symbol值 console.log(typeof(Symbol())); // symbol
instanceof
运算符用于检测构造函数的prototype
属性是否出如今某个实例对象的原型链上,返回值为布尔值,用于指示一个变量是否属于某个对象的实例。其语法以下所示:
object instanceof constructor
instanceof
主要的实现原理就是只要右边变量的prototype
在左边变量的原型链上便可。所以,instanceof
在查找的过程当中会遍历左边变量的原型链,直到找到右边变量的prototype
,若是查找失败,则会返回false
.步骤以下所示:
上面讲述了instanceof的简单使用和其原理,下面简单使用一下并验证一下该原理:
const arr = [1, 2]; // 判断Object的prototype有没有在数组的原型链上 console.log(arr instanceof Object); // true // 数组arr的原型 const proto1 = Object.getPrototypeOf(arr); console.log(proto1); // [] // 数组arr的原型的原型 const proto2 = Object.getPrototypeOf(proto1); console.log(proto2); // [] // Object的prototype console.log(Object.prototype); // 判断arr的原型是否与Object的prototype相等 console.log(proto1 === Object.prototype); // false // 判断arr的原型的原型是否与Object的prototype相等 console.log(proto2 === Object.prototype); // true
1.若是以为这篇文章还不错,来个分享、点赞吧,让更多的人也看到数组
2.关注公众号执鸢者,与号主一块儿斩杀前端百题。浏览器