Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   непонятно про приведение null к boolean (https://javascript.ru/forum/misc/26108-neponyatno-pro-privedenie-null-k-boolean.html)

udav 26.02.2012 14:41

непонятно про приведение null к boolean
 
Всем привет.
В учебнике по JS на этом сайте я прочитал, что при приведении null к boolean, его значением будет false.
Однако, когда у меня есть переменная со значением null, то все происходит наоборот.
if (null) {
	window.alert("null is false"); // этот код не отработает
}
var name = null;
if (name) {
	window.alert("name is true"); // этот код всегда вызывается
}

Можете мне объяснить, почему так происходит?

Mахmaxmaximus 26.02.2012 15:52

nasqad,
я скопировал его код и запустил, у меня сработало второе условие, проверь свой лисобраузер.

рони 26.02.2012 16:03

Вторая часть кода сработает в Safari и Google Chrome

nikita.mmf 26.02.2012 16:07

так только из-за некоторых имен переменных, напримерн свойство name есть у window. В хроме при установке ему значения оно переводит значение в строку.
var nil = null;
var name = nil;
alert( typeof nil + "\n" + typeof name );

Mахmaxmaximus 26.02.2012 16:28

млять точно вспомнил же, я в свое времяо со статусом так ибался.

но почему так? почему они зарезервиловали переменную name а меня не предупредили? спецификация запрещяет использование name в глобальном контексте? - нет! какого хрена они такое вытваряют?? и как я должен был узнать? если делают извращения, то пусть будут добры делать их обратносовместными!

udav 26.02.2012 19:03

Действительно, все дело в имени переменной.
Этот скрипт работает как я и ожидаю.
var xxx = null;
	if (xxx) {
		window.alert("name is true"); // этот код не вызывается
	}

Aetae 26.02.2012 21:52

http://javascript.ru/window.name

Mахmaxmaximus 26.02.2012 23:17

Aetae,
у лисы имя окна можно приравнять в null?

Aetae 27.02.2012 05:50

Да. ФФ просто не заморачивается: если ты так сделал, знач тебе так надо, а думать за кодера и приводить к значение к строке фф не будет. И правильно, имхо.


Часовой пояс GMT +3, время: 17:10.