JavaScript ==原理与分析
JavaScript原始类型
ECMAScript 有 5 种原始类型(primitive type),即 Undefined、Null、Boolean、Number 和 String。
typeof 运算符
typeof 运算符有一个参数,即要检查的变量或值。例如:
var sTemp = "test string";
alert (typeof sTemp); //输出 "string"
alert (typeof 86); //输出 "number"
对变量或值调用 typeof 运算符将返回下列值之一:
undefined - 如果变量是 Undefined 类型的
boolean - 如果变量是 Boolean 类型的
number - 如果变量是 Number 类型的
string - 如果变量是 String 类型的
object - 如果变量是一种引用类型或 Null 类型的
注释:您也许会问,为什么 typeof 运算符对于 null 值会返回 "Object"。这实际上是 JavaScript 最初实现中的一个错误,然后被 ECMAScript 沿用了。现在,null 被认为是对象的占位符,从而解释了这一矛盾,但从技术上来说,它仍然是原始值。
JavaScript引用类型
对于引用类型,众说纷纭。
从网络上总结的暂时有Object、Boolean、Number、String、Date、Array、Function。
==核心原理
知乎大佬manxisuo对于原理进行的全面解析,核心就是类型转换。
先说转换结果:
undefined == null,结果是true。且它俩与所有其他值比较的结果都是false。
String == Boolean,需要两个操作数同时转为Number。
String/Boolean == Number,需要String/Boolean转为Number。
Object == Primitive,需要Object转为Primitive(具体通过valueOf和toString方法)。
核心关注引用类型Object转换原始类型(primitive type)
引用类型中的valueOf与toString方法,可以进行重写,类似如下
var obj = {valueOf: function(){ return {} }, toString: function(){ return {}}}
console.log(obj);
console.log(obj.toString());
console.log(obj.valueOf());
console.log(typeof obj);
{valueOf: ƒ, toString: ƒ}
{}
{}
object
对于上方obj通过valueOf与toString方法后,最后获得结果为{},而{}这个结果是无法转换为原始类型的。
总结
知乎大佬Belleve、知乎大佬manxisuo进行了如下总结。
转换总结
双等比较
全等比较
完整比较
- 红色:===
- 橙色:==
- 黄色:<= 和 >= 同时成立,== 不成立
- 蓝色:只有 >=
- 绿色:只有 <=
巨人的肩膀
一张图彻底搞懂JavaScript的==运算 - 知乎 (zhihu.com)
(79 条消息) Javascript 中 == 和 === 区别是什么? - 知乎 (zhihu.com)
JavaScript引用类型之Array数组的toString()和valueof()方法的区别 - 郑小超 - 博客园 (cnblogs.com)
ECMAScript 原始类型 (w3school.com.cn)
ECMAScript 引用类型 (w3school.com.cn)
“一天不学习,我浑身难受” -X大力
最新文章
- ABP(现代ASP.NET样板开发框架)系列之6、ABP依赖注入
- git版本控制?
- Centos 6.0将光盘作为yum源的设置方法
- 转connect() to unix:/var/run/php-fpm.sock failed (11: Resource temporarily unavailable)
- copy sqlserver中DATE类型的数据转化 CONVERT
- IOS多线程(GCD)
- 自定义View(一)-ViewGroup实现优酷菜单
- asp 回发的时候样式变化
- PL/SQL:使用pragma restrict_references限制包权限
- Windows7 无法打开ASA SSL VPN和ASDM首页
- cdoj 847 方老师与栈 火车进出战问题
- 键盘游戏之canvas--用OO方式写
- [C++基金会]位计算 游戏开发中的应用
- 推荐系列:最小与最大[DP+余式定理]
- java类集: collection, list , set, map
- 快速学习Bash
- Java基础系列-Stream
- O/R关系的深入理解(转载)
- 十二省联考题解 - JLOI2019 题解
- cmder 常用配置(包括默认管理员运行和解决中文乱码)