Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript中的“hello”==(除“hello”之外的任何将返回true的内容)?_Javascript_String Comparison_Ecmascript 5_Triple Equals - Fatal编程技术网

JavaScript中的“hello”==(除“hello”之外的任何将返回true的内容)?

JavaScript中的“hello”==(除“hello”之外的任何将返回true的内容)?,javascript,string-comparison,ecmascript-5,triple-equals,Javascript,String Comparison,Ecmascript 5,Triple Equals,我知道JavaScript中的==与类型强制比较。我知道以下陈述是正确的: 然而,我无法将其与左侧的“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 除了“hello”之外,还有什么可以与“hello”相比的结果是真的吗?有一个: if

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

然而,我无法将其与左侧的“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
除了“hello”之外,还有什么可以与“hello”相比的结果是真的吗?

有一个:

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
或其他:

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

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

如果您研究==的强制规则,您会发现,唯一能够满足==的Hello是一个已经是Hello的字符串或具有返回Hello的.toString方法的字符串

这可以通过加入数组、直接返回字符串、处理组合成该字符串的一组字符代码等多种创造性方式来实现。。。但是,最后,.toString必须返回Hello才能满足==测试

如果您不允许正在比较的对象以任何方式包含Hello,或者不能根据需要生成该字符串,那么除了当被要求强制生成字符串时生成该字符串Hello的内容之外,没有其他内容可以满足==的要求

下面是外行对Javascript类型强制规则的描述:

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

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

如果一个是字符串,另一个是数字,则尝试将字符串转换为数字,并将其与另一个数字进行比较。因为NumberHello是NaN,所以这对一个数字永远不起作用,因为NaN不能==到另一个数字

如果一个是字符串,另一个是对象,则调用内部方法valueOf(如果已定义)或toString(如果未定义),并将结果与字符串进行比较

如果一个是字符串,另一个是布尔值,则将两者转换为数字并进行比较。因为NumberHello是NaN,所以它永远不会匹配转换为数字时为0或1的布尔值。例如:true==1


不过我想比较一下。它必须是“hello”==更新的。将字符串与字节进行比较。不能将hello包含在其中:否。如果您不允许其他对象包含hello,则没有任何其他内容会强制将be==包含在hello中。这个问题的重点是什么?现在,如果没有问题背后的逻辑,这似乎是毫无意义的。如果你研究强制规则,你会发现只有那些具有.toString方法返回Hello的对象才会==到Hello,比如:或者:如果你想知道比较算法是如何工作的,您可以在这里查看:@jfriend00:也许您应该将解释作为答案发布。@FelixKling-我把它放在了答案中。
var x = {
    toString: function() {return "Hello";}
}

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