你必须知道的Javascript知识点之"字面量和对应类型"说明介绍
2013-04-23 00:00
791 查看
代码示例:
之所以要写这个主题,是因为日期类型的比较经常会出现意想不到的错误,几乎每个刚接触javascript的开发人员都会遇到这个问题。
到底是为什么
规则1
javascript中一切都是对象(引用类型),除了这几个类型的字面量(值类型):Boolean(如:true)、Number(如:100)、undefined、null。
规则2
引用类型之间用"=="或“===”做比较运算时,只要两者不是指向同一份内存地址,都会返回false。
代码示例
图片示意
规则3
引用类型和对应的值类型之间用“=="做比较运算时,会先进行类型转换,然后进行比较。
代码示例
规则4引用类型和对应的值类型之间用“==="做比较运算时,始终返回false。
代码示例
特殊的String类型
string是特殊的引用类型,javascript解释器遇到两个一样的字面量会未他们分配同一个内存地址,javascript本身也保持值语义(一旦创建不能修改)。
代码示例
图片示意
值类型的内存格局
代码示例
1 var num1 = 1;2 var num2 = 1;
图片示意
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
图片示意
规则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
图片示意
值类型的内存格局
代码示例
1 var num1 = 1;2 var num2 = 1;
图片示意
相关文章推荐
- 你必须知道的Javascript知识点之"字面量和对应类型"说明介绍
- Javascript:必须知道的Javascript知识点之“字面量和对应类型”
- 你必须知道的Javascript知识点之"深入理解作用域链"的介绍
- 你必须知道的Javascript知识点之"深入理解作用域链"的介绍
- 你必须知道的Javascript知识点之"单线程事件驱动"的使用
- 你必须知道的Javascript知识点之"单线程事件驱动"的使用
- 你必须知道的Javascript知识点之"this指针"的应用
- 你必须知道的Javascript知识点之"this指针"的应用
- Javascript:必须知道的Javascript知识点之“this指针”
- javascript的数据类型、字面量、变量介绍
- Javascript:必须知道的Javascript知识点之“作用域链”
- Javascript:必须知道的Javascript知识点之“this指针”
- Javascript:必须知道的Javascript知识点之“单线程事件驱动”
- javascript的数据类型、字面量、变量介绍
- Javascript:必须知道的Javascript知识点之“作用域链”
- Javascript:必须知道的Javascript知识点之“单线程事件驱动”
- 五个你必须知道的javascript和web debug技术 2013年11月20日 在前端开发中,调试技术是必不可少的技能,本文将介绍五种前端开发必备的调试技术。 Weinre移动调试 DOM 断点
- 你知道的,javascript语言的执行环境是"单线程模式",这种模式的好处是实现起来比较简单,执行环境相对单纯;坏处是只要有一个任务耗时很长,后面的任务都必须排队等着,会拖延整个程序的执行,因此很多时候需要进行“异步模式”,请列举js异步编程的方法。
- Javascript:必须知道的Javascript知识点
- Javascript:必须知道的Javascript知识点之“原型链”