一些团队规定禁用 == 运算符换用=== 严格相等。以工程标准衡量,== 带来的便利性抵不上其带来的成本,团队协作时候你看到别人代码中的 ==,有些时候需要判断清楚作者的代码意图是确实需要转型,还是无所谓要不要转型只是随手写了,增加了一些额外的成本。但是我比较喜欢的一本书  You don't know JS,中作者也写道过一个我比较赞同的观点

Many developers feel that === is more predictable, so they advocate always using that form and staying away from ==. I think this view is very shortsighted. I believe == is a powerful tool that helps your program, if you take the time to learn how it works.

简译为

很多开发者认为 === 的行为更加容易预测,从而主张使用 === 而远离 ==。我认为这种观点是非常短视的,如果你花点时间去搞清楚它的工作原理,== 将是你开发的强大工具。

究竟谁对谁错也没有定论,但是去了解一些隐式转换的规则,对我们开发和调试bug都非常有帮助。这些规则规定很烦多,一个个看过来很无趣也不能全记住。我们下面从这个问题的一些答案中去探究其中的一小部分规则。

下面代码中 a 在什么情况下会打印 1?

var a = ?;

if(a == 1 && a == 2 && a == 3)

{ 
console.log(1);
}

利用重写toString/valueOf

let a = {
i: 1,
toString () { //或者valueOf
return a.i++ //先返回后加
}
}
if(a == 1 && a == 2 && a == 3) {
console.log('1');
}

数组对象:

toString 方法返回一个字符串,该字符串由数组中的每个元素的 toString() 返回值经调用 join() 方法连接(由逗号隔开)组成,改写join方法为shift,每次返回第一个元素,并删除。

var a = [1,2,3];
a.join = a.shift; if(a == 1 && a == 2 && a == 3) {
console.log('1');
}

ES6的symbol:

Symbol.toPrimitive就是其中一个,它指向一个方法,表示该对象被转为原始类型的值时,会调用这个方法,返回该对象对应的原始类型值。这里就是改变这个属性,把它的值改为一个 闭包 返回的函数。

let a = {[Symbol.toPrimitive]: ((i) => () => ++i) (0)}; 

if(a == 1 && a == 2 && a == 3) {
console.log('1');
}

最新文章

  1. 图像旋转 OpenCV实现
  2. 在wex5平台grid里面的gridselect下拉不能显示汉字问题
  3. Ubuntu之root权限的获取
  4. JavaWeb学习笔记——开发动态WEB资源(六)ServletConfig和ServletContext
  5. AS2.0大步更新 Google强势逆天
  6. C++之路进阶——hdu2222(Keywords Search)
  7. oracle数据库中的表设置主键自增
  8. js 多物体运动
  9. nRF52系列——nRF52832来袭
  10. 使用int?来确保值类型也可以为null
  11. MVC4 Razor视图下使用iframe加载RDLC报表
  12. LeetCode-001 Two Sum
  13. web组件工具之获取表单数据:webUtils
  14. Jquery笔记之第一天
  15. path和classpath细节
  16. 如何应用ML的建议-上
  17. ubuntu下安装CAJ阅读器
  18. Windows核心编程:第9章 用内核对象进行线程同步
  19. Vue笔记:使用 axios 发送请求
  20. Oracle 之 保留两位小数

热门文章

  1. C realloc
  2. Django博客系统
  3. 谈谈我对证券公司一些部门的理解(前、中、后台)[z]
  4. RabbitMQ学习之:(十二)在Node.js环境下使用RabbitMQ
  5. 002-tomcat目录简介、应用部署【自动部署 ② 控制台部署 ③ 自定义部署】
  6. js 中 new call apply bind JSON.stringify 的原理以及模拟实现
  7. Docker容器时间与主机时间相差8小时
  8. webpy简单入门---1
  9. 第四章 信息收集之nmap
  10. mysql数据库之索引与慢查询优化