We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
面试官:== 和 === 有什么区别? 童鞋:=== 要求数据类型相同,== 会进行隐式类型转换... 面试官:JavaScript:(a==1 && a==2 && a==3)能输出true么? 童鞋:???
下面,我们来一起看看 == 和 === 到底有什么区别,以及上面问题的解法。
JavaScript 语言中,数据类型有:undefined、null、Boolean、String、Number、Object、Symbol。
其中,Object被称为引用数据类型,其他6种被称为基本数据类型。Symbol 是一种类似于字符串的,表示独一无二值的数据类型。
做一个小实验,得出不同类型的值用 == 操作符比较后的结果
toNumber() 和 toPrimitive() 方法是内部的,可以看一下估值
toNumber() 方法,比较好理解,就是转换成 Number 类型,类似 Number() 方法。
toPrimitive() 方法
valueOf
toString
Symbol.toPrimitive
举两个例子,来说明一下 toPrimitive() 方法:
var test = { value: 0, valueOf () { console.log('in valueOf fun') return this.value + 1 }, toString () { console.log('in toString fun') return this.value + 2 } } console.log('test == 1 ?', test == 1)
控制台输出结果:
通过输出可以看出,valueOf 的优先级要高于 toString,下面再来看一下 Symbol.toPrimitive 的优先级。
var test = { value: 0, valueOf () { console.log('in valueOf fun') return this.value + 1 }, toString () { console.log('in toString fun') return this.value + 2 }, [Symbol.toPrimitive] () { console.log('in [Symbol.toPrimitive] fun') return this.value + 3 } } console.log('test == 3 ?', test == 3)
通过输出可以看出,这三个方法的优先级从高到低依次为:Symbol.toPrimitive > valueOf > toString。
JavaScript:(a==1 && a==2 && a==3)能输出true么?
let a = { value: 0, valueOf () { return ++this.value } }
面试遇到隐式类型转换,再也不会怕啦~
欢迎各位关注我的Blog,正文以issue形式呈现,喜欢请点star,订阅请点watch~
The text was updated successfully, but these errors were encountered:
toPrimitive如果写的再细点就好了
Sorry, something went wrong.
已经添加~
No branches or pull requests
从 == 和 === 入手,聊聊隐式类型转换
下面,我们来一起看看 == 和 === 到底有什么区别,以及上面问题的解法。
数据类型
JavaScript 语言中,数据类型有:undefined、null、Boolean、String、Number、Object、Symbol。
其中,Object被称为引用数据类型,其他6种被称为基本数据类型。Symbol 是一种类似于字符串的,表示独一无二值的数据类型。
隐式类型转换
做一个小实验,得出不同类型的值用 == 操作符比较后的结果
toNumber() 和 toPrimitive() 方法是内部的,可以看一下估值
toNumber() 方法,比较好理解,就是转换成 Number 类型,类似 Number() 方法。
toPrimitive() 方法
valueOf
方法的结果是原始值,返回原始值; 如果对象的toString
方法返回原始值,就返回这个值; 也可以重写Symbol.toPrimitive
,该方法在转基本类型时调用优先级最高; 其他情况都返回一个错误举两个例子,来说明一下 toPrimitive() 方法:
控制台输出结果:
通过输出可以看出,
valueOf
的优先级要高于toString
,下面再来看一下Symbol.toPrimitive
的优先级。控制台输出结果:
通过输出可以看出,这三个方法的优先级从高到低依次为:
Symbol.toPrimitive
>valueOf
>toString
。回到面试题
面试遇到隐式类型转换,再也不会怕啦~
欢迎各位关注我的Blog,正文以issue形式呈现,喜欢请点star,订阅请点watch~
The text was updated successfully, but these errors were encountered: