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