'hello' == (что-нибудь, что вернет true, кроме 'hello') в JavaScript?
Я это понимаю ==
в 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
кроме "привет"?
3 ответа
Вот этот:
if('hello') {
alert('true')
}
Это будет оценено как true
потому что строка не пуста или null
,
Так как вы хотите сравнить:
'hello' == String.fromCharCode.apply(String, [104, 101, 108, 108, 111])
Вот один из них:
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
Вкратце, вот правила принуждения, когда используется строка:
Если оба типа являются строкой, то сравнение
true
только если две строки содержат одинаковые символы.Если одна строка, а другая - число, попробуйте преобразовать строку в число и сравнить ее с другим числом. поскольку
Number("Hello")
являетсяNaN
, это никогда не будет работать для числа, так как NaN не может быть==
на другой номер.Если один является строкой, а другой - объектом, вызовите внутренний метод
valueOf
если это определено илиtoString
если он не определен, сравните результат с вашей строкой.Если одна строка, а другая логическое значение, преобразуйте оба в число и сравните их. поскольку
Number("Hello")
являетсяNaN
, он никогда не будет соответствовать логическому, который либо будет0
или же1
при преобразовании в число. Например:true == "1"
,