2017-01-14 3 views
0

Я писал код, относящийся к генерации случайных чисел, и я бы добавил имя пользователя к предложению, которое было создано скриптом.Зачем нужно "null", но не null?

Пользователь вводит свой ответ с подсказкой. Я хотел знать, как проверить на null, поэтому я проверил это с ответом, предоставленным несколькими источниками в Stack Overflow. Однако он не работает для null. Любопытно, что он работает, когда null вводится в виде строки: "null". Я читал снова и снова, что null не является строкой, так зачем это работать?
Мой код для теста ниже:

<!DOCTYPE html> 
<html> 
    <head> 
    <title>Check</title> 
    <script> 
     var name = prompt("What's up?"); 
     function check() { 
     if (name === null) { 
      document.write("null"); 
     } 
     } 
    </script> 
    </head> 
    <body id="body" onload="check()"> 
    </body> 
</html> 
+1

Я вижу проблему сейчас ... изменить 'имя 'к чему-то другому, потому что' name' - свойство окна, которое вас испортит !!! –

ответ

2

Когда кто-то типы входных и оно получено с помощью сценария в виде строки. Поэтому, если кто-то типа null, он переводится как «null», т. Е. Строка со значением null. Поэтому, когда вы пытаетесь оценить его до значения null, он не работает. Однако, если вы оцениваете его по строке «null», он будет соответствовать.

EDIT: Если вы не хотите, чтобы пользователь вводил нулевые или любые другие вредоносные значения, создайте список таких строк и проверьте их. Относитесь к ним как к строковым значениям

Функция выполняется, когда вы нажимаете «Отмена», но поскольку вы отменяете операцию, значение имени устанавливается как «null». Вот как работает функция подсказок. https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt

+0

Чтобы добавить к ответу poushy, вам нужно проверить, что строка пуста, а не 'null' - https://jsfiddle.net/orrLqtfm/. –

+1

вы должны проверить «null», чтобы проверить, была ли нажата кнопка «cancel». –

+0

Если вы не хотите, чтобы пользователь вводил нулевые или любые другие вредоносные значения, создайте список таких строк и проверьте их. Рассматривайте их как строковые значения. – poushy

0

Вопрос чисто выбор имени переменной ... т.е. name

код с (почти) любой другой переменной имя будет работать «как и ожидалось»

var name = ... в глобальном масштабе, по существу, то же, что и window.name = ...

Теперь window.name определяется как имя окна ... это, как правило, пустая строка. если вы window.open окно, давая имя, то window.name будет то, что значение в новом окне

Теперь, назначая null к window.name фактически приведет к window.name == 'null' потому window.name не может быть не строковый тип. На самом деле назначая любое значение не-строковый window.name приведет к window.name, имеющий «.ToString()» значение

попробовать

window.name = true; // window.name will be the string "true"; 
window.name = {key: "value"}; // window.name will be the string "[object Object]"; 

и т.д.