2011-09-17 4 views
2

Я хотел бы найти путь к программному (т.е. путем написания кода) найти для того, что значения x мы имеем выражение x == null вычисляемой true.Определение преобразования типов программно

+1

Теоретически это было бы невозможно. Диапазон значений, которые может принимать x, бесконечен.Вам нужно будет взглянуть на языковые спецификации или использовать процесс устранения, чтобы смотреть только на определенные ценности, которые являются хорошими кандидатами. – Anurag

ответ

3

невозможно (без предварительного знания, по крайней мере, основные правила JavaScript) иметь возможность программно определить все значения x, для которых x == null верно. Тем не менее, следующий должен показать шаблон, из которого эвристические может быть получено:

var v = [null, undefined, false, true, -1, 0, 1, "", " ", "0", {}, []] 
for (var i = 0; i < v.length; i++) { 
    var x = v[i] 
    alert(x + " == null? " + (x == null)) 
} 

(Данный тест действительно покрывают все времена, когда это было бы верно.)

Подобных тестов можно сделать для == false, и т.д.

Счастливое кодирование.


См. Ответ Ray Toal для получения дополнительных предложений по тестовым значениям.

2

В отсутствии зная по крайней мере то о том, как выполняет JavaScript преобразования типов, как эти преобразования применяются через оператор == вы должны проверить все возможные значения от null, а число возможных значений безгранично, поэтому то, что вы просите, не может быть сделано.

С немного знаний вы можете сломать мир из всех возможных выражений JavaScript в следующих категориях:

  • неопределенных
  • нуль
  • истинный
  • ложные
  • отрицательные конечные числа
  • posit ив конечным числа
  • отрицательной бесконечности
  • положительной бесконечность
  • NaN
  • пустой строка
  • строки полной пробельной
  • строки по крайней мере один не символ пробел
  • пустой объект
  • a объект с некоторыми свойствами

Проверьте значение представителя от каждого класса против null и посмотрите, что вы получаете.

Я предполагаю, что вопрос был сформулирован так, что вы знаете точный раздел спецификации ECMA-262, который точно определяет семантику ==. (Раздел 11.9.3 от the 5.1 spec)

Смежные вопросы