Помогите разобраться: false, null??
JS - первый язык программирования, который я изучаю.
Помогите разобраться правильно ли я понимаю: Мы можем присвоить функции (или методу) null или false: func = null || func = false Есть ли какая-то разница? Что это означает НА САМОМ ДЕЛЕ: null - совсем уничтожает func как delete? а false - это эквивалент return false в функции или нет? Что-то другое? Далее, если мы присваиваем null || false эелементу ДОМ: elem = null - мы уничтожаем элемент. А elem = false? Можно ли так вообще делать, когда? Если где-то об этом говорится в учебнике, дайте, ссылочку, пожалуйста . |
Не могу там найти ответ на свой вопрос((
|
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
так как всё о чем вы говорите основано на ссылках, вы не уничтожаете ни элемент, ни функцию, вы просто убираете с переменных ссылки на них |
Цитата:
Цитата:
false - значение ЛОЖЬ Цитата:
1. true 2. false где бы в коде программы ты их не встретил, они останутся булевыми значениями http://learn.javascript.ru/variable-types |
Спасибо, что ответили
Цитата:
Цитата:
func = null; Ссылка уничтожится, но функция ни в какой другой переменной не останется. То, что она все-таки где-то (где?) осталась на что-то может повлиять? Цитата:
Цитата:
elem = false - тоже уничтожаем ссылку? Почему тогда при elem = false, одна и та же программа зависает, при elem = null работает как надо? |
Цитата:
После присваивания значения, переменная просто равна новому значению func = null; alert(func + ', ' + (func === null) + ', ' + (func === false)) func = false; alert(func + ', ' + (func === null) + ', ' + (func === false)) Цитата:
Если же осталась хоть одна ссылка, оставшаяся случайно, то функция будет существовать, и сборщик мусора ее не удалит. Это чревато утечками памяти |
Цитата:
Начиная с этого момента func это не функция, а просто переменная с заданным значением. Что использовать - зависит от ситуации. false противопоставляется true. То есть если вы ходите возвращать да-нет, то это нужный вариант null противопоставляется любому объекту Цитата:
Вот и все Видимо она правильно обрабатывает null(вполне логичное отсутствие функции), и неверно обрабатывает false |
Цитата:
Цитата:
Цитата:
|
Спасибо за ясность
Цитата:
|
eirnvn,
Есть такие хорошие штуки, как typeof и alert, которые помогут тебе разобраться. Например: alert("для false:" + typeof false); alert("для null:" + typeof null); Цитата:
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 ) ); Цитата:
То есть как только всем переменным, которые хранили на него ссылки будут присвоены другие значения (не обязательно их уничтожать - достаточно присвоить любые значения, чтобы ссылка на наш объект потерялась). После этого он превращается в мусор, которым займется сборщик мусора, когда придет время, и удалит его из памяти. |
Часовой пояс GMT +3, время: 04:21. |