面试题如下,如何能打印出1
var a = ?
if (a == 1 && a == 2 && a == 3) {
console.log(1)
}
知识点1:分析这道题目,首先我们要想到 == 与 === 的区别
当进行双等号比较时候: 先检查两个操作数数据类型,如果相同, 则进行===比较, 如果不同, 则愿意为你进行一次类型转换, 转换成相同类型后再进行比较, 而===比较时, 如果类型不同,直接就是false
知识点2:== 遇到不同的数据类型 遵循怎样的转换规则
1 对象和string 对象toString 再和string的比较
2 null == undefined
3 NaN 不等于任何值 判断NaN只能用isNaN
4 其他都是转化成数字 object => toString => 转化成数字
知识点3: valueOf和toString的区别以及调用顺序
1 toString() 方法返回一个表示改对象的字符串,如果是对象会返回,toString() 返回 “[object type]”,其中type是对象类型。
2 valueOf方法返回指定对象的原始值,JS会利用 valueOf() 方法用来把对象转换成原始类型的值(数值、字符串和布尔值
具体可参考 搞懂toString 和valueOf
https://www.jianshu.com/p/cf87b92ee365
1、 在进行对象转换时(例如:alert(a)),将优先调用toString方法,如若没有重写toString将调用valueOf方法,如果两方法都不没有重写,但按Object的toString输出。
2、 在进行强转字符串类型时将优先调用toString方法,强转为数字时优先调用valueOf。
3、 在有运算操作符的情况下,valueOf的优先级高于toString。
知识点介绍完了 我们来看这道题的答案
解法一:
用toString
var a = {
i: 1,
toString() {
return this.i++
}
}
解法2:
用valueOf
var a = {
i: 1,
valueOf () {
return this.i++
}
}
解法3:
a 为数组
var a = [1, 2, 3]
a.toString = a.shift
添加一个题目
var a = [0]
if(a) {
console.log(a==true)
} else {
console.log(a)
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。