Несколько вопросов по JavaScript
еще вопрос
почему этот код:
var x = prompt("Введите первое число", "");
var y = prompt("Введите второе число", "");
x = parseInt(x);
y = parseInt(y);
var z = x * y;
document.write(z);
и этот:
var x = prompt("Введите первое число", "");
var y = prompt("Введите второе число", "");
var z = x * y;
document.write(z);
выполняются одинаково?
где подвох то?
вопрос: откуда браузер знает его размер?
не знает. он все такие рисует
выполняются одинаково?
где подвох то?
попробуйте большие числ, больше sqrt(2^32) (1048576*1048576=?)
подвох видимо в усечении...
123123 х 122122 = одинаково oO
выходит, что брешут книги-то.
получается, что современные браузеры умеют отличать число от не числа, даже если оно, число, и не объявлено явно...
выходит, что брешут книги-то.
получается, что современные браузеры умеют отличать число от не числа, даже если оно, число, и не объявлено явно...
да кто его знает? а если на IE?
а на IE5? а ведь есть ещё люди с IE5 (и IE6) :( сам видел в статистике своего форума...
Размер окна сообщения определяется размером текста сообщения.
выполняются одинаково?
Попробуйте в обоих примерах ввести вещественное число или текст.
выполняются одинаково?
где подвох то?...
...получается, что современные браузеры умеют отличать число от не числа, даже если оно, число, и не объявлено явно...
Ничего удивительного. Это же javascript :D . Так и должно быть. Строгой типизации нет.
Попробуй умножить число на текст.
с вашего позволения продолжу...
вот конструкция:
if (!name)
name = "неизвестный";не могу понять логику "!".
что он отрицает?
Если name не объявлен, то name = "неизвестный".
Не уверен, но выражение "!name" эквивалентно "name == undefined"
не могу понять логику "!"
! — это логический оператор отрицания. В вашем примере отрицается значение переменной name. Если эта переменная содержит данные логического типа, то её значение изменится на противоположное:
name = true
!name // false
name = false
!name // true
Если же name содержит данные типа, отличного от логического, то будет осуществлено их приведение к последнему, а уже потом обращено значение этой переменной:
name = ''
!!name // false
!name // true
name = 'Termo'
!!name // true
!name // false
name = 0
!!name // false
!name // true
name = 0.0
!!name // false
!name // true
name = 1
!!name // true
!name // false
name = 1.1
!!name // true
!name // false
name = undefined
!!name // false
!name // true
name = []
!!name // true
!name // false
name = [1, 2, 3]
!!name // true
!name // false
name = function() {}
!!name // true
!name // false
Из примера видно, что значение false при приведении получают ''(пустая строка), 0, 0.0, undefined. Остальным значениям передается true.
if (!name) name = 'some name' — это общая идиома передачи переменной значения, в том случае если последнее сопоставимо с false:
var name = ''
if (!name) name = 'Termo'
// name = 'Termo'
SamuelLinux,
в примере суть такая
var name = prompt("Введите ваше имя");
if (!name)
name = "неизвестный";
document.write("Привет, " "!");
если будет введено имя, то будет "Привет, Петя!"
если человек просто нажмет ОК или Cancel, то "Привет, неизвестный!"
вот я и пытаюсь понять логику кода.
переменная name
если значение переменной отрицается, т.е. не вводится в prompt, то оно (значение) становится равным "неизвестный", так?
Termo, вот как работает приведенный вами код:
name = window.prompt('Кто?')
Здесь, переменной name передается значение, возвращаемое методом prompt объекта window. Если вы ввели в поле диалогового окна свое имя, то этой переменной будет передана строка с вашим именем, если вы ничего не ввели, — то пустая строка, если же вы нажали клавишу «Отмена» в диалоговом окне, то переменной передастся значение null:
// вы ввели 'Termo'
name = 'Termo'
// вы ничего не ввели
name = ''
// вы нажали клавишу "Отмена"
name = null
Далее, используя оператор !, мы обращаем значение, содержащееся в переменной name. Поскольку ни одно из возможных значений не будет являеться логическим (true, false), то сначала будет осуществлено приведение любого из них к данному типу. В JavaScript пустая строка и null соотносятся со значением false, а непустая строка — с true. Так как инструкция if выполняет переданный ей блок только в том случае, если значение указанного в скобках выражения истинно, то мы можем, отрицая ложь, получать требуемую истину и т. о. запускать код в блоке:
// name = 'Termo'
// !name = false
// name = ''
// !name = true
// name = null
// !name = true
if (!name) { name = 'Конь в пальто!' } // блок будет выполнен только в том случае, если !name == true
спасибо!
с трудом но понял. smile
полагаю, что в данном случае выполнится тот код, где возвращаемое значение переменной name не будет равно лжи.
если значение ложно, то name == "неизвестный!"
если правда, то - введенное имя --> Привет, Петя!
к этому вопросу с двойной логикой нужно будет потом вернуться.
иначе будут проблемы в будущем....
это как с двойным отрицанием в английском языки --> I don't need no doctor. smile
Termo,
При чем тут "двойная логика"? Возьмите любую книгу для начинающих по любому (практически) языку прграммирования - там все доступно разжевано во избежане "проблем в будущем". Прочитаете - тогда такие вопросы (извините, ламерские) отпадут и возникать не будут. Попутно отпадет еще куча вопросов
Hvzh, хочу - задаю вопросы.
не хочу - не задаю.
есть проблемы?
