代码示例

 1 var date1 = new Date(2013,1,1);
 2 var date2 = new Date(2013,1,1);
 3 date1 == date2;  //执行结果为false
 4 date1 === date2;  //执行结果为false
 5
 6 var num1 = new Number(10);
 7 var num2 = new Number(10);
 8 num1 == num2;  //执行结果为false
 9 num1 === num2;  //执行结果为false
10 num1 == 10;  //执行结果为true
11 10 == num2;  //执行结果为true
12 num1 === 10;  //执行结果为false
13 10 === num2;  //执行结果为false

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

到底是为什么

规则1

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

规则2

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

代码示例

1 var date1 = new Date(2013,1,1);
2 var date2 = new Date(2013,1,1);
3 date1 == date2;  //执行结果为false
4 date1 === date2;  //执行结果为false

图片示意

规则3

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

代码示例

1  var num1 = new Number(10);
2  var num2 = new Number(10);
3  num1 == 10;  //执行结果为true
4  10 == num2;  //执行结果为true

规则4

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

代码示例

1  var num1 = new Number(10);
2  var num2 = new Number(10);
3  num1 === 10;  //执行结果为false
4  10 === num2;  //执行结果为false

特殊的String类型

string是特殊的引用类型,javascript解释器遇到两个一样的字面量会未他们分配同一个内存地址,javascript本身也保持值语义(一旦创建不能修改)。

代码示例

 1 var str1 = new String('hello');
 2 var str2 = new String('hello');
 3 var str3 = 'hello';
 4 var str4 = 'hello';
 5
 6 str1 == str2  //指向结果为false
 7 str1 === str2  //指向结果为false
 8 str3 == str4  //指向结果为true
 9 str3 === str4  //指向结果为true
10 str2 == str4  //指向结果为true
11 str2 === str4  //指向结果为false

图片示意

值类型的内存格局

代码示例

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

图片示意

备注

文中提到了类型转换,javascript中的类型转换规则我还没具体弄明白,改天要查看一下《javascript高级编程》

Javascript:必须知道的Javascript知识点之“字面量和对应类型”相关推荐

  1. 作用域链涉及了什么计算机底层知识,你必须知道的Javascript知识点之深入理解作用域链的介绍...

    示例代码: var xxxVar1 = 1; var outer = function(){ var xxxVar2 = 2; var results = []; for(var i = 0; i&l ...

  2. python语言必背代码-Python新手必须知道的25条知识点

    原标题:Python新手必须知道的25条知识点 1.到底什么是Python?你可以在回答中与其他技术进行对比 下面是一些关键点: Python是一种解释型语言.这就是说,与C语言和C的衍生语言不同,P ...

  3. html5技术有哪些新特性,28个你必须知道的HTML5的新特性,技巧以及技术

    崭新新的页面布局 传统的: HTML5: 1. 新的Doctype 尽管使用,即使浏览器不懂这句话也会按照标准模式去渲染 2. Figure元素 用 和 来语义化地表示带标题的图片 This is a ...

  4. [你必须知道的.NET]第二十一回:认识全面的null

    <你必须知道的.NET>网站 | Anytao技术博客  [你必须知道的.NET]第二十一回:认识全面的null 发布日期:2008.7.31 作者:Anytao © 2008 Anyta ...

  5. 【转】[你必须知道的.NET]第二十一回:认识全面的null

    引用自:http://www.cnblogs.com/anytao/category/155694.html 作者:Anytao . 说在,开篇之前 null. nullable.??运算符.null ...

  6. 网页最少要有一个html标签,PHP_网页开发人员必须知道的10个不常用HTML标签, 网页开发人员常常希望能 - phpStudy...

    网页开发人员必须知道的10个不常用HTML标签 网页开发人员常常希望能够了解并掌握多种语言,结果是,学习一门语言的所有内容是棘手的,但是却很容易发现你并没有完全利用那些比较特殊却很有用的标签. 不幸的 ...

  7. 程序员必须知道的HTML常用代码有哪些?

    HTML即超文本标记语言,是目前应用最为广泛的语言之一,是组成一个网页的主要语言.在现今这个HTML5华丽丽地占领了整个互联网的时候,如果想要通过网页抓住浏览者的眼球光靠因循守旧是不行的,程序猿们需要 ...

  8. [你必须知道的.NET] 开篇有益-------这是一个系列,文章中有后面章节的连接

    本文将介绍以下内容: • .NET的核心知识汇总 • 学习.NET的圣经心得 1. 引言 最近常常为学习中的问题而伤神,幸有管伟一起常常就技术问题拿来讨论,我已想将讨论的内容以基本原貌的方式,形成一个 ...

  9. php必须知道的300个问题-目录

    php必须知道的300个问题 第1章 PHP开发规范与入门要点 问题1 如何在Windows下配置PHP开发环境? 答案 问题2 如何在Linux下配置PHP开发环境? 问题3 如何搭建IIS+PHP ...

最新文章

  1. VS Code 离线安装插件方法
  2. kobject_create_and_add
  3. php中一个经典的!==的用法
  4. docker pull下载镜像时的报错及其解决方法
  5. python使用 pdb 进行调试--- python -m pdb xxx.py 即可 和gdb使用一样
  6. 敏捷项目管理—敏捷四宣言
  7. Intel汇编程序设计-整数算术指令(上)
  8. 转:MySQL性能优化的最佳20+条经验
  9. python第三天課程:int, bool, str
  10. Pycharm、Idea、Goland 官方汉化来了
  11. VTK:小部件之SplineWidget
  12. arccatalog点要素显示不完_如果你读不完显示屏说明书,至少读完这几句话吧
  13. python抽象基类的作用_Python:多态、鸭子模型和抽象基类
  14. [转载] python循环中break、continue 、exit() 、pass的区别
  15. mysql ssh .net_c# – 使用SSH.NET库与MySQL建立SSH连接
  16. Cocos Creator 使用 Android Studio 打包 APK 遇到的坑
  17. linux消息队列默认长度,Linux 消息队列长度处理
  18. python中的换行与不换行
  19. 新加坡设自动巡逻机器人,助力城市精细化治理
  20. iframe页面的内嵌框架

热门文章

  1. Metasploit save命令技巧
  2. Swift3.0语言教程分割字符串与截取字符串
  3. ​网页图表Highcharts实践教程之图表代码构成
  4. Xamarin ios 教程 Xamarin跨平台开发 C#苹果应用开发
  5. 域控制器升级的先决条件验证失败新建_快应用开发工具升级v1.4.0
  6. python序列类型有_Python数值类型和序列类型
  7. arraylist 初始化_第一章 C#数据结构--数组和ArrayList
  8. 电脑有摄像头吗_知道ip地址就能入侵摄像头吗?
  9. iOS推送兼容iOS7
  10. oauth password模式_史上最干的Oauth案例分析