你必须知道的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 相关文章推荐
JS判断是否为数字,是否为整数,是否为浮点数的代码
Apr 24 Javascript
JQuery获取或设置ckeditor的数据(示例代码)
Nov 15 Javascript
Javascript冒泡排序算法详解
Dec 03 Javascript
JavaScript中字符串分割函数split用法实例
Apr 07 Javascript
JavaScript中的toLocaleLowerCase()方法使用详解
Jun 06 Javascript
js阻止浏览器默认行为的简单实例
May 15 Javascript
JavaScript代码实现图片循环滚动效果
Mar 19 Javascript
JavaScript跨域调用基于JSON的RESTful API
Jul 09 Javascript
js is_valid_filename验证文件名的函数
Jul 19 Javascript
JS排序算法之冒泡排序,选择排序与插入排序实例分析
Dec 13 Javascript
说说如何利用 Node.js 代理解决跨域问题
Apr 22 Javascript
JavaScript中十种一步拷贝数组的方法实例详解
Apr 22 Javascript
你必须知道的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 实现代码复用的一个方法 traits新特性
2015/02/22 PHP
基于php实现随机合并数组并排序(原排序)
2015/11/26 PHP
UPUPW 更新 64 位 Apache 系列 PHP 7.0 正式版
2015/12/08 PHP
PHP编写RESTful接口
2016/02/23 PHP
php格式文件打开的四种方法
2018/02/24 PHP
Laravel框架集成UEditor编辑器的方法图文与实例详解
2019/04/17 PHP
找到一点可怜的关于dojo资料,谢谢作者!
2006/12/06 Javascript
JavaScript 利用StringBuffer类提升+=拼接字符串效率
2009/11/24 Javascript
服务器端的JavaScript脚本 Node.js 使用入门
2012/03/07 Javascript
JavaScript高级程序设计(第3版)学习笔记9 js函数(下)
2012/10/11 Javascript
jquery中$(#form :input)与$(#form input)的区别
2014/08/18 Javascript
JavaScript分秒倒计时器实现方法
2015/02/02 Javascript
js判断输入字符串是否为空、空格、null的方法总结
2016/06/14 Javascript
基于js中的原型、继承的一些想法
2016/08/10 Javascript
微信小程序 九宫格实例代码
2017/01/21 Javascript
整理关于Bootstrap导航的慕课笔记
2017/03/29 Javascript
详解Javascript获取缓存和清除缓存API
2017/05/25 Javascript
基于Vue渲染与插件的加载顺序的问题详解
2018/03/05 Javascript
详解性能更优越的小程序图片懒加载方式
2018/07/18 Javascript
Node爬取大批量文件的方法示例
2019/06/28 Javascript
Vue路由对象属性 .meta $route.matched详解
2019/11/04 Javascript
vue 解决setTimeOut和setInterval函数无效报错的问题
2020/07/30 Javascript
在VUE中使用lodash的debounce和throttle操作
2020/11/09 Javascript
Python的Flask框架与数据库连接的教程
2015/04/20 Python
Python实现文件按照日期命名的方法
2015/07/09 Python
python2.x实现人民币转大写人民币
2018/06/20 Python
python调用百度地图WEB服务API获取地点对应坐标值
2019/01/16 Python
python如何实现单链表的反转
2020/02/10 Python
Python用requests库爬取返回为空的解决办法
2021/02/21 Python
Staples加拿大官方网站:办公用品一站式采购
2016/09/25 全球购物
捷克玩具商店:Bambule
2019/02/23 全球购物
《梅花魂》教学反思
2014/04/30 职场文书
2015年志愿者服务工作总结
2015/04/20 职场文书
妈妈别哭观后感
2015/06/08 职场文书
煤矿施工安全协议书
2016/03/22 职场文书
mysql如何查询连续记录
2022/05/11 MySQL