你必须知道的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 相关文章推荐
改进:论坛UBB代码自动插入方式
Dec 22 Javascript
jquery.combobox中文api和例子,修复了上面的小bug
Mar 28 Javascript
javascript延时加载之defer测试
Dec 28 Javascript
jquery html动态生成select标签出问题的解决方法
Nov 20 Javascript
JS实现页面超时后自动跳转到登陆页面
Jan 19 Javascript
基于jQuery实现的扇形定时器附源码下载
Oct 20 Javascript
JS 对象(Object)和字符串(String)互转方法
May 20 Javascript
Vuejs 组件——props数据传递的实例代码
Mar 07 Javascript
angular.js+node.js实现下载图片处理详解
Mar 31 Javascript
用vue的双向绑定简单实现一个todo-list的示例代码
Aug 03 Javascript
微信小程序在地图选择地址并返回经纬度简单示例
Dec 03 Javascript
react实现同页面三级跳转路由布局
Sep 26 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模板引擎SMARTY
2006/10/09 PHP
php curl模拟post提交数据示例
2013/12/31 PHP
php中heredoc与nowdoc介绍
2014/12/25 PHP
php获取文件类型和文件信息的方法
2015/07/10 PHP
PHP闭包函数详解
2016/02/13 PHP
PHP中利用sleep函数实现定时执行功能实现代码
2016/08/25 PHP
Yii2实现增删改查后留在当前页的方法详解
2017/01/13 PHP
yii2 resetful 授权验证详解
2017/05/18 PHP
PHP生成随机码的思路与方法实例探索
2019/04/11 PHP
nodejs 整合kindEditor实现图片上传
2015/02/03 NodeJs
jQuery实现移动 和 渐变特效的点击事件
2015/02/26 Javascript
jQuery+PHP+MySQL二级联动下拉菜单实例讲解
2015/10/27 Javascript
全面了解JavaScript的数据类型转换
2016/07/01 Javascript
BootStrap实现手机端轮播图左右滑动事件
2016/10/13 Javascript
Vue.directive自定义指令的使用详解
2017/03/10 Javascript
JS加密插件CryptoJS实现的DES加密示例
2018/08/16 Javascript
Vue组件创建和传值的方法
2018/08/17 Javascript
apicloud拉起小程序并传递参数的方法示例
2018/11/21 Javascript
浅谈在Vue.js中如何实现时间转换指令
2019/01/06 Javascript
es6函数之尾调用优化实例分析
2020/04/25 Javascript
vue实现顶部菜单栏
2020/11/08 Javascript
[48:02]Ti4循环赛第三日 VG vs Liquid和NEWBEE vs DK
2014/07/12 DOTA
Python Web框架Pylons中使用MongoDB的例子
2013/12/03 Python
Python基于checksum计算文件是否相同的方法
2015/07/09 Python
Python实现获取命令行输出结果的方法
2017/06/10 Python
关于Python 3中print函数的换行详解
2017/08/08 Python
Python函数装饰器实现方法详解
2018/12/22 Python
python基础 range的用法解析
2019/08/23 Python
使用python实现希尔、计数、基数基础排序的代码
2019/12/25 Python
网易微博Web App用HTML5开发的过程介绍
2012/06/13 HTML / CSS
突破canvas语法限制 让他支持链式语法
2012/12/24 HTML / CSS
HTML5的语法变化介绍
2013/08/13 HTML / CSS
如何查看浏览器对html5的支持情况
2020/12/15 HTML / CSS
什么是SQL Server的确定性函数和不确定性函数
2016/08/04 面试题
就业协议书怎么填
2014/09/15 职场文书
体育运动会广播稿
2014/10/05 职场文书