不一样的JavaScript(3)——比较

1. Javascript除了有==和!=两个运算符比较两个值或对象是否相等,还提供了===和!==两个运算符。

2. ==和!=在比较两个值或者对象是否相等时,有可能将被比较的值或者对象转换之后再做比较。

2.1 布尔值将会转换成数值。true被转换成1,false被转换成0。

console.log(false == 0); // true
console.log(true == 1);  // true
console.log(true == 3);  // false

2.2 如果==或!=的一端是number类型,另一端是string类型,string类型会先转换成number类型再比较时候相等。

console.log("3" == 3); // true

2.3 如果==或!=是引用类型的一个对象而另一端不是,将用valueOf()方法取得应用类型对象的值再作比较。

var a = "hello world";
var b = new String("hello world");
console.log(a == b); // true

在上述代码中,a是一个string而b是一个object,但由于b的内容和a一样(b.valueOf()返回值为hello world的string),因此a == b比较的结果仍然是true。

2.4 null和undefined相等。

console.log(null == undefined); // true

2.5 null和undefined不能转换成其他类型,因此null或defined与其他值或对象相比较均不相等

console.log(null == 0);      // false
console.log(undefined == 0); // false
console.log(null == '');     // false

2.6 NaN不和任何值或对象相等。NaN甚至不等于NaN。 

console.log(NaN == 0);     // false
console.log(NaN == 'NaN'); // false
console.log(NaN == NaN);   // false

 2.7 如果比较两个应用类型的对象,如果它们是同一对象则相等,否则不相等。

var a = [1, 2, 3];
var b = [1, 2, 3];
console.log(a == b) // false

在上述代码中,a和b都是Array类型的对象,并且数组中的内容是一样的。但由于它们指向的不同对象,因此仍然被认为是不相等的。

3. 如果用===和!==比较两个对象或者值是否相等,则只有当它们的类型和值都相等时,才被认为是相等的。也就是说,当用===或!==比较时,不会发生类型转换。如果类型不同,则认为是不相等的。

console.log(false === 0);        // false
console.log(true === 1);         // false
console.log("3" === 3);          // false

var a = "hello world";
var b = new String("hello world");
console.log(a === b);            // false

console.log(null === undefined); // false

在上面的代码中,在用===比较时由于两个被比较的元素是不同的类型,因此所有比较的结果均为false。但如果用运算符==进行比较, 所有结果均为true。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值