Javascript:必须知道的Javascript知识点之“字面量和对应类型”
代码示例
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知识点之“字面量和对应类型”相关推荐
- 作用域链涉及了什么计算机底层知识,你必须知道的Javascript知识点之深入理解作用域链的介绍...
示例代码: var xxxVar1 = 1; var outer = function(){ var xxxVar2 = 2; var results = []; for(var i = 0; i&l ...
- python语言必背代码-Python新手必须知道的25条知识点
原标题:Python新手必须知道的25条知识点 1.到底什么是Python?你可以在回答中与其他技术进行对比 下面是一些关键点: Python是一种解释型语言.这就是说,与C语言和C的衍生语言不同,P ...
- html5技术有哪些新特性,28个你必须知道的HTML5的新特性,技巧以及技术
崭新新的页面布局 传统的: HTML5: 1. 新的Doctype 尽管使用,即使浏览器不懂这句话也会按照标准模式去渲染 2. Figure元素 用 和 来语义化地表示带标题的图片 This is a ...
- [你必须知道的.NET]第二十一回:认识全面的null
<你必须知道的.NET>网站 | Anytao技术博客 [你必须知道的.NET]第二十一回:认识全面的null 发布日期:2008.7.31 作者:Anytao © 2008 Anyta ...
- 【转】[你必须知道的.NET]第二十一回:认识全面的null
引用自:http://www.cnblogs.com/anytao/category/155694.html 作者:Anytao . 说在,开篇之前 null. nullable.??运算符.null ...
- 网页最少要有一个html标签,PHP_网页开发人员必须知道的10个不常用HTML标签, 网页开发人员常常希望能 - phpStudy...
网页开发人员必须知道的10个不常用HTML标签 网页开发人员常常希望能够了解并掌握多种语言,结果是,学习一门语言的所有内容是棘手的,但是却很容易发现你并没有完全利用那些比较特殊却很有用的标签. 不幸的 ...
- 程序员必须知道的HTML常用代码有哪些?
HTML即超文本标记语言,是目前应用最为广泛的语言之一,是组成一个网页的主要语言.在现今这个HTML5华丽丽地占领了整个互联网的时候,如果想要通过网页抓住浏览者的眼球光靠因循守旧是不行的,程序猿们需要 ...
- [你必须知道的.NET] 开篇有益-------这是一个系列,文章中有后面章节的连接
本文将介绍以下内容: • .NET的核心知识汇总 • 学习.NET的圣经心得 1. 引言 最近常常为学习中的问题而伤神,幸有管伟一起常常就技术问题拿来讨论,我已想将讨论的内容以基本原貌的方式,形成一个 ...
- php必须知道的300个问题-目录
php必须知道的300个问题 第1章 PHP开发规范与入门要点 问题1 如何在Windows下配置PHP开发环境? 答案 问题2 如何在Linux下配置PHP开发环境? 问题3 如何搭建IIS+PHP ...
最新文章
- VS Code 离线安装插件方法
- kobject_create_and_add
- php中一个经典的!==的用法
- docker pull下载镜像时的报错及其解决方法
- python使用 pdb 进行调试--- python -m pdb xxx.py 即可 和gdb使用一样
- 敏捷项目管理—敏捷四宣言
- Intel汇编程序设计-整数算术指令(上)
- 转:MySQL性能优化的最佳20+条经验
- python第三天課程:int, bool, str
- Pycharm、Idea、Goland 官方汉化来了
- VTK:小部件之SplineWidget
- arccatalog点要素显示不完_如果你读不完显示屏说明书,至少读完这几句话吧
- python抽象基类的作用_Python:多态、鸭子模型和抽象基类
- [转载] python循环中break、continue 、exit() 、pass的区别
- mysql ssh .net_c# – 使用SSH.NET库与MySQL建立SSH连接
- Cocos Creator 使用 Android Studio 打包 APK 遇到的坑
- linux消息队列默认长度,Linux 消息队列长度处理
- python中的换行与不换行
- 新加坡设自动巡逻机器人,助力城市精细化治理
- iframe页面的内嵌框架
热门文章
- Metasploit save命令技巧
- Swift3.0语言教程分割字符串与截取字符串
- ​网页图表Highcharts实践教程之图表代码构成
- Xamarin ios 教程 Xamarin跨平台开发 C#苹果应用开发
- 域控制器升级的先决条件验证失败新建_快应用开发工具升级v1.4.0
- python序列类型有_Python数值类型和序列类型
- arraylist 初始化_第一章 C#数据结构--数组和ArrayList
- 电脑有摄像头吗_知道ip地址就能入侵摄像头吗?
- iOS推送兼容iOS7
- oauth password模式_史上最干的Oauth案例分析