Javascript 数据类型和值类型

Javascript 数据类型和值类型,javascript,Javascript,我是Javascript的新手。(3周后)。我正在努力掌握基本知识。直接问我的问题:“3”==3返回false。“因为它们不是相同的数据类型或值”我理解数据类型的不同,因为“3”是字符串,3是数字。我似乎失去了它的价值。它不应该是错误的,因为只是数据类型的差异而不是值的差异吗?我假设“值”是指3。对此的澄清将不胜感激。TL;博士:对人类来说,3和“3”的值是一样的,但对计算机来说,它们看起来很不一样 具有不同数据类型的变量不能具有相同的值,因为它们的数据存储方式不同。字符串单独存储每个字母(因此

我是Javascript的新手。(3周后)。我正在努力掌握基本知识。直接问我的问题:“3”==3返回false。“因为它们不是相同的数据类型”我理解数据类型的不同,因为“3”是字符串,3是数字。我似乎失去了它的价值。它不应该是错误的,因为只是数据类型的差异而不是值的差异吗?我假设“值”是指3。对此的澄清将不胜感激。

TL;博士:对人类来说,
3
“3”
的值是一样的,但对计算机来说,它们看起来很不一样

具有不同数据类型的变量不能具有相同的值,因为它们的数据存储方式不同。字符串单独存储每个字母(因此较长的字符串需要更多的存储空间),而数字总是占用相同的空间(因此较大的数字不会比较小的数字需要更多的存储空间)

另一种想法是:
3
是数字3<代码>“3”包含字母3。字母与数字的存储方式不同,因此,即使它们在您看来是相同的,
3
“3”
在计算机上看起来也非常不同

3
二进制数字可能如下所示:

010000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000

“3”
字母看起来如下:

00000000 00110011

==运算符(相等)

如果操作数不属于同一类型,相等运算符将转换操作数,然后应用严格比较。如果两个操作数都是对象,则JavaScript比较操作数引用内存中同一对象时相等的内部引用

==运算符的示例

0    == false      // true
0    == null       // false
标识/严格相等(==)

如果操作数严格等于无类型转换,则标识运算符返回true

==运算符的示例

3==3//true
3=='3'//false

Tou可以访问此页面以了解更多JavaScript操作符。

您应该将其阅读为

如果“==”的两个操作数的数据类型或值不相同,则它们不相等

或者更简单地理解:

严格比较(例如,===)仅在操作数类型相同且内容匹配的情况下才为true


源代码:

JavaScript具有严格的和类型转换相等比较。为了严格相等,要比较的对象必须具有相同的类型和:

当两个字符串具有相同的字符序列、相同的长度以及在相应位置具有相同的字符时,它们是严格相等的

当两个数字在数字上相等(具有相同的数值)时,它们严格相等。NaN不等于任何东西,包括NaN。正零和负零彼此相等

如果两个布尔操作数均为真或均为假,则两个布尔操作数严格相等

如果两个对象引用同一个对象,则它们严格相等

Null和未定义的类型是==(但不是==)。[即,(Null==未定义)为真,但(Null==未定义)为假]

为了更好地理解,请查看下面的代码

0 == false   // true
0 === false  // false, because they are of a different type
1 == "1"     // true, automatic type conversion for value only
1 === "1"    // false, because they are of a different type
null == undefined // true
null === undefined // false
'0' == false // true
'0' === false // false

是的,这就是为什么如果你想返回
true
,它会说“or value”,然后使用double equal
“3”==3
,它不会检查数据类型。如果它不是同一类型,
===
总是
false
。如果是同一类型但值不同,那么它也是
false
。如果它们是不同的数据类型,那么从技术角度来看,值总是不同的。
2==3
也返回
false
,但现在由于值不同而不是类型,这并不能解决他的问题。他在问为什么
3==“3”
的类型和值都失败,而不仅仅是类型。3是整数,“3”是字符串。。使用===严格相等,所以它应该是,
3===3
integer或
“3”==“3”
字符串。@EKW我相信你已经回答了我的问题。我认为我对3和“3”的理解和计算机的理解是一样的。谢谢,也谢谢其他人。是的,但OP并没有问为什么它返回false。OP说他认为
3==“3”
返回false,因为尽管(根据OP)值相同,但数据类型不同。OP的教科书上说值和数据类型是不同的。@JSpecs如果我回答了你的问题,请将我的答案标记为正确:)这不是OP所问的。OP说他认为3==“3”返回false,因为尽管(根据OP)值相同,但数据类型不同。OP的教科书上说,值和数据类型是不同的。@EKW他的问题是关于短语的逻辑,他在给出的例子中采用了过于字面化的短语