关于JS中比较运算符和关系运算符的隐式转换分析
比较运算符隐式类型转换的核心规则当两边类型不同时会按照以下优先级进行转换可以想象成一个“决斗擂台”一步步把双方变成同一种类型再比布尔值 → 数字true变成1false变成0。字符串 → 数字空字符串变成0纯数字字符串如123变成对应数字其他字符串如abc变成NaN。对象 → 原始值对象会先调用valueOf()如果返回原始值则用该值否则再调用toString()用返回的字符串。大多数普通对象如{}、[]的valueOf()返回对象本身所以会走到toString()。空数组[]的toString()返回空字符串。数组[1,2,3]的toString()返回1,2,3。普通对象{}的toString()返回[object Object]。特殊规则null和undefined互相相等null undefined为true且它们与其它任何值比较都是false除了对方。NaN与任何值包括自身比较都是false。总结一个关于 运算符的口诀核心就是往数字类型转看到先找布尔布尔转数字。再找对象对象转字符串。最后看字符串字符串转数字。关系运算符 隐式类型转换的核心规则如果是引用类型先将两个操作数转为原始值。判断转换后的两个原始值类型如果两个都是字符串则按字典顺序Unicode 码点 数字大写字母小写字母比较。否则将两边都转为数字进行数值比较。关键点布尔值会被转数字true→ 1false→ 0。null转数字为0undefined转数字为NaN。如果转换后有任何一边是NaN则比较结果为false因为NaN与任何数比较都是false包括NaN NaN也是false。关于关系运算符的口诀核心还是往数字类型方向转不过转的途中两边都是字符串的话就比较Unicode 了看到 先找引用类型将其转换成字符串。再看两边是不是都是字符串如果是则直接比较Unicode。如果一边是字符串一边是数字则比较数字大小。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2422272.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!