Просмотр полной версии : Логическое Not ! и ноль
Можно сказать, что
!(0) == true
а
!(n) == false, где n - любое число, кроме нуля.
Так? Всё правильно?
CrazyFlasher
27.11.2007, 18:42
а функией trace() не пробовали пользоваться?
Пробовал
trace(!(0));
trace(!(1));
trace(!(-1));
true
false
false
Просто не верится. Не знал, что логическое отрицание нуля - даёт значение "истина".
Fernando Costa
27.11.2007, 21:13
вполне очевидно что:
не(неправда) == правда
;)
Пробовал
trace(!(0));
trace(!(1));
trace(!(-1));
true
false
false
Просто не верится. Не знал, что логическое отрицание нуля - даёт значение "истина".
Ноль при переводе в булево выражение дает «false», оператор отрицания возвращает true. В чем проблема?
Это АС2 насильно конвертит Number в Boolean, иногда очень удобно, а иногда дико мешает. Чтобы проверить, не является ли аргумент числом лучше пользоваться isNaN()
Это АС2 насильно конвертит Number в Boolean, иногда очень удобно
Всегда удобно.
Мне, иногда нужно, чтобы и 0 тоже считался за true, мне было бы удобнее, если бы я сам себе мог настраивать правила конвертации числа в булевое значение =) (Очень часто хочется, чтобы, например, <0 считалось за false, а >=0 за true, избавило бы от лишней операции %)
Собственно, >= и есть решение.
function isLess (val) {
return Boolean (Math.max (val + 1, 0));
}
trace (isLess (2));
trace (isLess (1));
trace (isLess (0));
trace (isLess (-1));
trace (isLess (-2));
Ок, другой пример: %)
function a(){
var _a = arguments[0] || 1;
}
Ну, вот ноль никак переменной в таком раскладе не присвоишь, приходится писать длиннее %)
Я же не говорю, что нет решения %) оно конечно же есть =))) ну. только хочется иногда писать меньше =) (лентяй я :P)
function a(){
var _a = arguments[0]+1 || 1;
_a--;
}
Но это уже как минимум 8 лишних знаков! %)
function isLess () {
var _a = arguments[0];
return (_a == undefined ? 10 : _a);
}
trace (isLess (2));
trace (isLess (1));
trace (isLess (0));
trace (isLess (-1));
trace (isLess (-2));
trace (isLess ());
про знаки не смеши
Ок, давайте посмотрим на вопрос шире %)
Возможно ли вообще как-то повлиять на то, каким образом Флеш конвертит типы один в другой?
Ну, вот не важно зачем, но вот хочется мне, чттобы выражение типа
Number("hi!") возвращало Number.POSITIVE_INFINITY =) Возможно ли такое?
CrazyFlasher
27.11.2007, 23:55
ерундой какой-то страдаете...есть правила...надо им придерживаться...в математике вы же не пытаетесь изменить аксиому о параллельных прямых и о том что на ноль делить нельзя...смысл тут тогда это делать? придумайте свою дискретную математику, постройте компьютер на её основе, напишите свой язык программирования...вот вам и простое решение проблемы :D
Я понимаю, что можно найти кучу отмазок, почему этого не нужно делать, но вот хочется, и все тут %)
Не хочу расширять Number, хочу, чтобы все мои Number'ы так себя вели. =)
Я не знаю, может. большой практической пользы от этого не будет, но все равно интересно %) Хотя, вот, например, хочу добавить вариативность к конструктору Number, на манер, как это есть у Array.
вот, чтобы Number(256,2,3) выдавал в итоге 0xffffff =)
Или, вот, куда более прозаический вариант! Number("red") = 0xff0000; :]
Ну... я бы не сказал... вот, представь, какая-то CMS-ка сгенерила простенькую текстовую страничку и использовала при ее создании вполне себе стандартные возможности типа style='p{color:red}' И все бы было почти замечательно, но вот, млин, флеш не поймет, что red == 0xff0000, и совсем другое значение туда подставит =)
Можно, конечно, на этапе париснга полученного текста\CSS'а это заменить, но ведь на сколько удобнее было бы добавить Number'у еще десяток констант!
Я несколькими постами выше сказал про расширение класса, ну или не расширение, а композицию, зависит от задача. Но факт в том, что нужно писать свой класс. Вообще-то классы для того и пишут, чтобы они делали так, как тебе нужно.
Если ты задаешь в cms color:red, значит напиши обработчик который, не напрямую передает стиль, а сначала его парсит и подставляет то, что тебе нужно.
Ладно, не хотите заморачиваться - как хотите, я же не требую ничего =)
Мне просто интересно (пошел дальше пробовать =)
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.