-1

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

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

但是,我无法与左侧的“你好”进行比较:

'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的吗?

4

3 回答 3

4

有这个:

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

这将被评估为true因为字符串不为空或null.

既然你想比较:

'hello' == String.fromCharCode.apply(String, [104, 101, 108, 108, 111])
于 2014-05-10T07:58:01.133 回答
3

这算不算?

["hello"] == "hello"  // true
于 2014-05-10T07:59:40.513 回答
2

这是一个:

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"一个字符串。


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


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

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

  2. 如果一个是字符串,另一个是数字,则尝试将字符串转换为数字并将其与另一个数字进行比较。由于Number("Hello")is NaN,这将永远不会适用于一个数字,因为 NaN 不能是==另一个数字。

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

  4. 如果一个是字符串而另一个是布尔值,则将两者都转换为数字并进行比较。因为Number("Hello")is NaN,它永远不会匹配一个布尔值,该布尔值要么被转换为数字,0要么被1转换为数字。例如:true == "1"

于 2014-05-10T08:09:34.953 回答