你必须知道的Javascript知识点之"字面量和对应类型"说明介绍

2019-12-24,,

代码示例:
复制代码 代码如下:
var date1 = new Date(2013,1,1);
 var date2 = new Date(2013,1,1);
 date1 == date2;  //执行结果为false
 date1 === date2;  //执行结果为false

 var num1 = new Number(10);
 var num2 = new Number(10);
 num1 == num2;  //执行结果为false
 num1 === num2;  //执行结果为false
 num1 == 10;  //执行结果为true
 10 == num2;  //执行结果为true
 num1 === 10;  //执行结果为false
 10 === num2;  //执行结果为false

之所以要写这个主题,是因为日期类型的比较经常会出现意想不到的错误,几乎每个刚接触javascript的开发人员都会遇到这个问题。


到底是为什么
规则1
javascript中一切都是对象(引用类型),除了这几个类型的字面量(值类型):Boolean(如:true)、Number(如:100)、undefined、null。


规则2
引用类型之间用"=="或“===”做比较运算时,只要两者不是指向同一份内存地址,都会返回false。


代码示例
复制代码 代码如下:
var date1 = new Date(2013,1,1);
var date2 = new Date(2013,1,1);
date1 == date2;  //执行结果为false
date1 === date2;  //执行结果为false


图片示意



规则3


引用类型和对应的值类型之间用“=="做比较运算时,会先进行类型转换,然后进行比较。


代码示例
复制代码 代码如下:
var num1 = new Number(10);
  var num2 = new Number(10);
  num1 == 10;  //执行结果为true
  10 == num2;  //执行结果为true

规则4引用类型和对应的值类型之间用“==="做比较运算时,始终返回false。


代码示例
复制代码 代码如下:
var num1 = new Number(10);
  var num2 = new Number(10);
  num1 === 10;  //执行结果为false
  10 === num2;  //执行结果为false

特殊的String类型
string是特殊的引用类型,javascript解释器遇到两个一样的字面量会未他们分配同一个内存地址,javascript本身也保持值语义(一旦创建不能修改)。
代码示例
复制代码 代码如下:
var str1 = new String('hello');
 var str2 = new String('hello');
 var str3 = 'hello';
 var str4 = 'hello';

 str1 == str2  //指向结果为false
 str1 === str2  //指向结果为false
 str3 == str4  //指向结果为true
 str3 === str4  //指向结果为true
 str2 == str4  //指向结果为true
 str2 === str4  //指向结果为false

图片示意


值类型的内存格局


代码示例


1 var num1 = 1;2 var num2 = 1;

图片示意

您可能感兴趣的文章:

  • JavaScript 对象字面量讲解
  • javascript的数据类型、字面量、变量介绍
  • JavaScript中用字面量创建对象介绍
  • JavaScript中字面量与函数的基本使用知识
  • 浅谈js之字面量、对象字面量的访问、关键字in的用法
  • Javascript对象字面量的理解
  • ES6学习教程之对象字面量详解

《你必须知道的Javascript知识点之"字面量和对应类型"说明介绍.doc》

下载本文的Word格式文档,以方便收藏与打印。