JavaScript中Triple equal(三等号)是否优先比较类型再比较值?
三等号
===的比较顺序说明 ===执行严格相等比较时,会优先校验两个操作数的类型,类型不一致直接返回false,不会进入后续的值比较环节。
完整的比较流程如下:
- 第一步:类型校验
对比两个操作数的内置类型是否完全一致,只要类型不同直接终止比较,返回false - 第二步:同类型下的值校验
类型一致时,再根据对应类型的规则判断值是否相等:- 若为
undefined/null类型:直接返回true(同类型下这两类仅存在自身一个值) - 若为数字类型:先判断是否存在
NaN,只要有一个操作数是NaN就返回false;再判断数值是否相等,+0与-0视为相等 - 若为字符串类型:逐位对比字符编码,长度不同或任意位置字符编码不同则返回
false - 若为布尔类型:仅两个值同为
true或同为false时返回true - 若为引用类型(对象、数组、函数等):对比内存引用地址,仅指向同一个实例时返回
true,内容完全相同但地址不同也会返回false
- 若为
可参考以下示例验证规则:
// 类型不同直接返回false,不会比较值 1 === '1' // false true === 1 // false null === undefined // false // 类型相同才会对比值 2 === 2 // true 'hello' === 'hello' // true [] === [] // false 两个数组引用地址不同
内容的提问来源于stack exchange,提问作者Muhammad Arqam
相关产品推荐
相关产品推荐

