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


Posted in Javascript onApril 23, 2013

代码示例:

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

图片示意

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

规则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

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

值类型的内存格局

代码示例

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

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

Javascript 相关文章推荐
JavaScript添加随滚动条滚动窗体的方法
Feb 23 Javascript
JS中innerHTML和pasteHTML的区别实例分析
Jun 22 Javascript
利用js编写响应式侧边栏
Sep 17 Javascript
bootstrap 表单验证使用方法
Jan 11 Javascript
js遍历json的key和value的实例
Jan 22 Javascript
Angular项目从新建、打包到nginx部署全过程记录
Dec 09 Javascript
详解Javascript中new()到底做了些什么?
Mar 29 Javascript
微信小程序文章详情页面实现代码
Sep 10 Javascript
Vue循环组件加validate多表单验证的实例
Sep 18 Javascript
vue开发简单上传图片功能
Jun 30 Javascript
Vue + ts实现轮播插件的示例
Nov 10 Javascript
在vue项目中封装echarts的步骤
Dec 25 Vue.js
你必须知道的Javascript知识点之"单线程事件驱动"的使用
Apr 23 #Javascript
你必须知道的Javascript知识点之"this指针"的应用
Apr 23 #Javascript
jquery清空textarea等输入框实现代码
Apr 22 #Javascript
js计算精度问题小结
Apr 22 #Javascript
基于javascipt-dom编程 table对象的使用
Apr 22 #Javascript
用js实现小球的自由移动代码
Apr 22 #Javascript
jquery打开直接跳到网页最下面、最低端实现代码
Apr 22 #Javascript
You might like
用PHP ob_start()控制浏览器cache、生成html实现代码
2010/02/16 PHP
phpMyAdmin 链接表的附加功能尚未激活的问题
2010/08/01 PHP
细谈php中SQL注入攻击与XSS攻击
2012/06/10 PHP
常见php数据文件缓存类汇总
2014/12/05 PHP
php操作xml入门之cdata区段
2015/01/23 PHP
fckeditor上传文件按日期存放及重命名方法
2015/05/22 PHP
对PHP依赖注入的理解实例分析
2016/10/09 PHP
jquery实现的超出屏幕时把固定层变为定位层的代码
2010/02/23 Javascript
jQuery 选择器、DOM操作、事件、动画
2010/11/25 Javascript
JavaScript 匿名函数(anonymous function)与闭包(closure)
2011/10/04 Javascript
jquery插件jTimer(jquery定时器)使用方法
2013/12/23 Javascript
JavaScript两种跨域技术全面介绍
2014/04/16 Javascript
jQuery得到多个值只能用取Class ,不能用取ID的方法
2016/12/04 Javascript
Vue.js实战之使用Vuex + axios发送请求详解
2017/04/04 Javascript
JS实现加载时锁定HTML页面元素的方法
2017/06/24 Javascript
Vue cli+mui 区域滚动的实例代码
2018/01/25 Javascript
浅谈react受控组件与非受控组件(小结)
2018/02/09 Javascript
微信小程序实现modal弹出框遮罩层组件(可带文本框)
2020/12/20 Javascript
[02:50]【扭转乾坤,只此一招】DOTA2全新版本永雾林渊开启新篇章
2020/12/24 DOTA
用python分割TXT文件成4K的TXT文件
2009/05/23 Python
在Python中使用异步Socket编程性能测试
2014/06/25 Python
Python中Iterator迭代器的使用杂谈
2016/06/20 Python
python3下实现搜狗AI API的代码示例
2018/04/10 Python
基于Django ORM、一对一、一对多、多对多的全面讲解
2019/07/26 Python
Apache部署Django项目图文详解
2019/07/30 Python
pygame实现贪吃蛇游戏(上)
2019/10/29 Python
使用批处理脚本自动生成并上传NuGet包(操作方法)
2019/11/19 Python
SpringBoot首页设置解析(推荐)
2021/02/11 Python
《充气雨衣》教学反思
2014/04/07 职场文书
村委会贫困证明范本
2014/09/17 职场文书
房屋租房协议书范本
2014/12/04 职场文书
医院员工辞职信范文
2015/05/12 职场文书
会议营销主持词
2015/07/03 职场文书
电工实训心得体会
2016/01/14 职场文书
彻底理解golang中什么是nil
2021/04/29 Golang
Python List remove()实例用法详解
2021/08/02 Python