繁体   English   中英

JavaScript中的'hello'==(除“ hello”以外,其他都会返回true的内容)?

[英]'hello' == (anything that will return true other than 'hello') in JavaScript?

我知道JavaScript中的==是与强制类型的比较。 我知道以下陈述是true

'' == false;
' ' == false;
'0' == false;
'\n' == false;

但是,我无法与左侧的“ hello”作比较:

'hello' == true; // no this is false
'hello' == false; // no this is false
'hello' == 1; // no this is false
'hello' == 0; // no this is false

有什么“你好”可以被比作一个结果true不是“你好”等?

有一个:

if('hello') {
  alert('true') 
}

因为字符串不为空或null所以将其评估为true

由于您想要比较:

'hello' == String.fromCharCode.apply(String, [104, 101, 108, 108, 111])

这算吗?

["hello"] == "hello"  // true

这是一个:

var x = ['H', 'e', 'l', 'l', 'o'];
x.toString = function() {
    return this.join("");
}

alert(x == "Hello");   // true

http://jsfiddle.net/jfriend00/KSgwb/

或其他:

var x = {
    toString: function() {return "Hello";}
}

alert(x == "Hello");   // true

http://jsfiddle.net/jfriend00/hKx9x/

如果研究==的强制性规则,您会发现,唯一满足“ == "Hello"是已经是"Hello"的字符串或具有.toString()方法的返回值"Hello"

可以通过加入数组,直接返回字符串,处理一堆组合在一起形成该字符串的字符代码等多种方式以所需的多种方式来实现。但是,最后, .toString()具有返回"Hello"以满足==测试。


如果您不允许所比较的事物以任何方式包含"Hello"或无法按需生成该字符串,那么没有其他满足==除非会生成该字符串当要求您强制使用字符串时, "Hello"


这是外行对Java语言的类型强制规则的描述: http : //webreflection.blogspot.com/2010/10/javascript-coercion-demystified.html


简而言之,这是涉及字符串时的强制规则:

  1. 如果两种类型都是字符串,则仅当两个字符串包含完全相同的字符时,比较才为true

  2. 如果一个是字符串,另一个是数字,则尝试将字符串转换为数字,然后将其与另一个数字进行比较。 由于Number("Hello")NaN ,因此这对于数字将永远无效,因为NaN不能==另一个数字。

  3. 如果一个是字符串,另一个是对象,则调用内部方法valueOf如果已定义)或toString如果未定义),然后将其结果与您的字符串进行比较。

  4. 如果一个是字符串,另一个是布尔值,则将两者都转换为数字并进行比较。 由于Number("Hello")NaN ,因此永远不会与转换为Number时为01的布尔值匹配。 例如: true == "1"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM