代码示例:
复制代码代码如下所示:
VaR date1 =新的日期(2013,1,1);
VAR把=新日期(2013,1,1);
要把= = / /执行结果;假
日期1 =把 / /执行结果;假

VaR num1 =新号(10);
VaR num2 =新号(10);
num1 = = num2; / /执行结果为假
num1 = num2; / /执行结果为假
num1 = = 10; / /执行结果为真
10 = = num2; / /执行结果为真
num1 = 10; / /执行结果为假
10 = = = num2; / /执行结果为假

我们写这个主题的原因是,日期类型的比较经常会导致意外的错误。几乎所有接触Javascript的开发人员都会遇到这个问题。

为什么是这样
规则1
Javascript中的所有内容都是对象(引用类型),除了这些类型的文字量(值类型):布尔(如true)、数字(例如:100)、未定义的、null。

规则2
如果不指向内存地址,则返回或比较之间的引用类型将返回false。

代码示例
复制代码代码如下所示:
VaR date1 =新的日期(2013,1,1);
VAR把=新日期(2013,1,1);
要把= = / /执行结果;假
日期1 =把 / /执行结果;假



图片



规则3

在引用类型和对应的值类型比较之间,将首先进行类型转换,然后比较。

代码示例
复制代码代码如下所示:
VaR num1 =新号(10);
VaR num2 =新号(10);
num1 = = 10; / /执行结果为真
10 = = num2; / /执行结果为真

第4条引用值类型,并与之对应的比较,总是返回false。

代码示例
复制代码代码如下所示:
VaR num1 =新号(10);
VaR num2 =新号(10);
num1 = 10; / /执行结果为假
10 = = = num2; / /执行结果为假

特殊类型的字符串
字符串是一种特殊引用类型。Javascript解释器在遇到两个相同的文字数量时,不会分配相同的内存地址,Javascript本身也保留值语义(一旦创建不能修改)。
代码示例
复制代码代码如下所示:
var str1 =新的字符串(你好);
Var STR2 = new String ('hello');
VaR STR3 =你好;
无功str4 =你好;

str1 = = str2 / /结果的假
str1 = str2 /虚假点的结果
STR3 = = str4 / /结果真实
STR3 = str4 /真实点的结果
str2 = = str4 / /结果真实
str4 str2 = /虚假点的结果

图片


值类型的内存模式

代码示例
1 VAR num1 = 1;2变量num2 = 1;

图片