Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 09.11.2012, 23:06
Аватар для eirnvn
Кандидат Javascript-наук
Отправить личное сообщение для eirnvn Посмотреть профиль Найти все сообщения от eirnvn
 
Регистрация: 15.09.2011
Сообщений: 70

Помогите разобраться: false, null??
JS - первый язык программирования, который я изучаю.
Помогите разобраться правильно ли я понимаю:
Мы можем присвоить функции (или методу) null или false:
func = null || func = false
Есть ли какая-то разница?
Что это означает НА САМОМ ДЕЛЕ:
null - совсем уничтожает func как delete?
а false - это эквивалент return false в функции или нет? Что-то другое?

Далее, если мы присваиваем null || false эелементу ДОМ:
elem = null - мы уничтожаем элемент.
А elem = false?
Можно ли так вообще делать, когда?
Если где-то об этом говорится в учебнике, дайте, ссылочку, пожалуйста .
__________________
"I don't write to say what I think, but to know what I think"
Ответить с цитированием
  #2 (permalink)  
Старый 11.11.2012, 11:59
Аватар для eirnvn
Кандидат Javascript-наук
Отправить личное сообщение для eirnvn Посмотреть профиль Найти все сообщения от eirnvn
 
Регистрация: 15.09.2011
Сообщений: 70

Не могу там найти ответ на свой вопрос((
__________________
"I don't write to say what I think, but to know what I think"
Ответить с цитированием
  #3 (permalink)  
Старый 11.11.2012, 12:21
Аватар для Dim@
Профессор
Отправить личное сообщение для Dim@ Посмотреть профиль Найти все сообщения от Dim@
 
Регистрация: 21.04.2012
Сообщений: 951

Сообщение от eirnvn
func = null || func = false
Есть ли какая-то разница?
да
Сообщение от eirnvn
null - совсем уничтожает func как delete?
нет
Сообщение от eirnvn
а false - это эквивалент return false в функции или нет?
нет
Сообщение от eirnvn
elem = null - мы уничтожаем элемент.
это не так
Сообщение от eirnvn
А elem = false?
тоже самое

так как всё о чем вы говорите основано на ссылках, вы не уничтожаете ни элемент, ни функцию, вы просто убираете с переменных ссылки на них
Ответить с цитированием
  #4 (permalink)  
Старый 11.11.2012, 12:50
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от eirnvn
JS - первый язык программирования, который я изучаю.
соболезную
Сообщение от eirnvn
Есть ли какая-то разница?
null - отсутствие значения
false - значение ЛОЖЬ

Сообщение от eirnvn
а false - это эквивалент return false в функции или нет? Что-то другое?
булева значения существует всего два:
1. true
2. false
где бы в коде программы ты их не встретил, они останутся булевыми значениями

http://learn.javascript.ru/variable-types
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #5 (permalink)  
Старый 11.11.2012, 12:55
Аватар для eirnvn
Кандидат Javascript-наук
Отправить личное сообщение для eirnvn Посмотреть профиль Найти все сообщения от eirnvn
 
Регистрация: 15.09.2011
Сообщений: 70

Спасибо, что ответили
Цитата:
Сообщение от eirnvn
func = null || func = false
Есть ли какая-то разница?
да
Какая, если можно на примере?
Цитата:
Сообщение от eirnvn
null - совсем уничтожает func как delete?
нет
function func () {lalalala;}
func = null;
Ссылка уничтожится, но функция ни в какой другой переменной не останется. То, что она все-таки где-то (где?) осталась на что-то может повлиять?
Цитата:
Сообщение от eirnvn
а false - это эквивалент return false в функции или нет?
нет
какая же разница между func = null || func = false???
Цитата:
Сообщение от eirnvn
elem = null - мы уничтожаем элемент.
это не так
Сообщение от eirnvn
А elem = false?
тоже самое
elem = null - ок, уничтожаем ссылку
elem = false - тоже уничтожаем ссылку?
Почему тогда при elem = false,
одна и та же программа зависает, при
elem = null работает как надо?
__________________
"I don't write to say what I think, but to know what I think"
Ответить с цитированием
  #6 (permalink)  
Старый 11.11.2012, 13:04
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

Сообщение от eirnvn
Какая, если можно на примере?
Это два разных значения.
После присваивания значения, переменная просто равна новому значению
func = null;
alert(func + ', ' + (func === null) + ', ' + (func === false))
func = false;
alert(func + ', ' + (func === null) + ', ' + (func === false))

Сообщение от eirnvn
Ссылка уничтожится, но функция ни в какой другой переменной не останется. То, что она все-таки где-то (где?) осталась на что-то может повлиять?
Если функция нигде больше не видна, то сборщик мусора удалит ее.
Если же осталась хоть одна ссылка, оставшаяся случайно, то функция будет существовать, и сборщик мусора ее не удалит.
Это чревато утечками памяти
Ответить с цитированием
  #7 (permalink)  
Старый 11.11.2012, 13:12
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

Сообщение от eirnvn
какая же разница между func = null || func = false???
Вы просто записываете в переменную конкретное значение.
Начиная с этого момента func это не функция, а просто переменная с заданным значением.
Что использовать - зависит от ситуации.

false противопоставляется true.
То есть если вы ходите возвращать да-нет, то это нужный вариант

null противопоставляется любому объекту

Сообщение от eirnvn
elem = null - ок, уничтожаем ссылку
elem = false - тоже уничтожаем ссылку?
Почему тогда при elem = false,
одна и та же программа зависает, при
elem = null работает как надо?
null !== false
Вот и все
Видимо она правильно обрабатывает null(вполне логичное отсутствие функции), и неверно обрабатывает false
Ответить с цитированием
  #8 (permalink)  
Старый 11.11.2012, 13:13
Аватар для eirnvn
Кандидат Javascript-наук
Отправить личное сообщение для eirnvn Посмотреть профиль Найти все сообщения от eirnvn
 
Регистрация: 15.09.2011
Сообщений: 70

Цитата:
Сообщение от eirnvn
JS - первый язык программирования, который я изучаю.
соболезную
Соболезнования не принимаются(()))
Цитата:
Сообщение от eirnvn
Есть ли какая-то разница?
null - отсутствие значения
false - значение ЛОЖЬ
Это ясно, спасибо, что напомнили, пытаюсь еще раз применить это к функции и элементу
Цитата:
Сообщение от eirnvn
а false - это эквивалент return false в функции или нет? Что-то другое?
булева значения существует всего два:
1. true
2. false
где бы в коде программы ты их не встретил, они останутся булевыми значениями
Вроде это и так ясно. Это уход от ответа или такой тонкий намек, что мне не понять)))???? Вот человек выше прямо сказал - не return false и точка.
__________________
"I don't write to say what I think, but to know what I think"
Ответить с цитированием
  #9 (permalink)  
Старый 11.11.2012, 13:25
Аватар для eirnvn
Кандидат Javascript-наук
Отправить личное сообщение для eirnvn Посмотреть профиль Найти все сообщения от eirnvn
 
Регистрация: 15.09.2011
Сообщений: 70

Спасибо за ясность

Цитата:
null противопоставляется любому объекту

Сообщение от eirnvn
elem = null - ок, уничтожаем ссылку
elem = false - тоже уничтожаем ссылку?
Почему тогда при elem = false,
одна и та же программа зависает, при
elem = null работает как надо?
null !== false
Вот и все
Видимо она правильно обрабатывает null(вполне логичное отсутствие функции), и неверно обрабатывает false
Только там не функция была, а элемент, который еще в ДОМ
__________________
"I don't write to say what I think, but to know what I think"
Ответить с цитированием
  #10 (permalink)  
Старый 12.11.2012, 06:04
Профессор
Отправить личное сообщение для Почемучкин Посмотреть профиль Найти все сообщения от Почемучкин
 
Регистрация: 11.05.2011
Сообщений: 241

eirnvn,
Есть такие хорошие штуки, как typeof и alert, которые помогут тебе разобраться. Например:
alert("для false:" + typeof false);
alert("для null:" + typeof null);
Цитата:
JS - первый язык программирования, который я изучаю.
ИМХО, JavaScript не лучший язык для изучения логических выражений (впрочем, C/C++/Java - тоже тут не идеал). Дело в том, что в JavaScript все запутано. И тебя, как только начинающего программировать, это соответственно может сильно запутать. Корни растут из принятого в Си порядка, где все, что 0 - эквивалентно false, а все, что не ноль - эквивалентно true.

null - это отдельный тип данных в Javascript, признак отсутствия конкретного значения у существующей переменной или свойства (вернее, неопределенное значение, пустота);
undefined - значит, что такой переменной или свойства не существует или они не инициализированы;
Вообще, с переводом значений на русский язык у null и undefined не все гладко. Я написал как их надо понимать, а не формально правильно.
NaN - "не-число", то есть оно-то имеет тип Number, но это значение указывает, что в переменной отсутствует числовое значение;
false - ложь, указывает, что результат отрицательный (в смысле - не такой как ожидается).
0 - как я говорил, еще со времен Си (а скорее еще со времен досишных - с двоичного кодирования) означает false в логических выражениях.
Еще есть проблема преобразования строк в логические выражения.
Например, пустая строка или строка с пробелами и переносами строк - аналогична false в логических выражениях:
alert("  \n \f" == false);


А еще.... между этими "отрицающими" значениями сложные взаимоотношения. Несмотря на то, что все они в логических выражениях заменяют false, тем не менее они могут быть не равны друг другу при прямом сравнении:
alert(false == null);

NaN никогда не равно само себе!
alert(NaN == NaN);

и т.д....

Чтобы избежать неочевидных преобразований в сравнениях, лучше использовать === вместо ==, потому что при === и !== сравниваются и значения, и типы, и никаких преобраований не происходит.

В общем, ты понял, что в JavaScript с логическими выражениями все очень запутано. Это потому, что его пытались сделать неформальным, проще в использовании, чем более формальные языки типа C++ и Java, да и ведь это был изначально лишь вспомогательный скрипт, без претензий на большие задачи. Отсюда и "непродуманность", хотя если ее изучить, то пользоваться JS удобнее и проще, чем "старшими товарищами".

Кроме typeof и === хорошо еще для проверки типов использовать такие штуки:
Object.prototype.toString.call(...)
instanceof
var AR = []; //массив
alert( typeof AR );
alert( Object.prototype.toString.call( AR ) );
alert( AR instanceof Array );
alert( Object.prototype.toString.call( null ) );

Цитата:
Далее, если мы присваиваем null || false эелементу ДОМ:
elem = null - мы уничтожаем элемент.
А elem = false?
Можно ли так вообще делать, когда?
Объект уничтожается только после того, как все ссылки на него будут уничтожены.
То есть как только всем переменным, которые хранили на него ссылки будут присвоены другие значения (не обязательно их уничтожать - достаточно присвоить любые значения, чтобы ссылка на наш объект потерялась). После этого он превращается в мусор, которым займется сборщик мусора, когда придет время, и удалит его из памяти.

Последний раз редактировалось Почемучкин, 12.11.2012 в 06:48.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите разобраться с XML antonilyin Общие вопросы Javascript 2 14.11.2012 20:12
Растянуть элемент по содержимому AnToxa Элементы интерфейса 11 09.04.2012 22:13
Помогите разобраться с галереей IMAGIN yana_studio Общие вопросы Javascript 4 12.12.2009 17:24
Помогите разобраться со сплиттером Tror Общие вопросы Javascript 1 16.01.2009 18:44
Помогите разобраться с логикой поведения скрипта MarkupDeveloper jQuery 3 21.06.2008 18:04