LinuxForum.Fans
Тема

Несколько вопросов по JavaScript

Автор: Termo 15 сообщений 3456 просмотров
#61243

по alert(); выскакивает диалоговое окно с кнопкой "ОК".
вопрос: откуда браузер знает его размер?

#61356

еще вопрос
почему этот код:

text

var x = prompt("Введите первое число", "");
var y = prompt("Введите второе число", "");
    x = parseInt(x);
    y = parseInt(y);
var z = x * y;
    document.write(z);

и этот:

text

var x = prompt("Введите первое число", "");
var y = prompt("Введите второе число", "");
var z = x * y;
    document.write(z);

выполняются одинаково?
где подвох то?

#61357
Termo написал:
вопрос: откуда браузер знает его размер?

не знает. он все такие рисует

Termo написал:
выполняются одинаково?
где подвох то?

попробуйте большие числ, больше sqrt(2^32) (1048576*1048576=?)
подвох видимо в усечении...

#61387

123123 х 122122 = одинаково oO

выходит, что брешут книги-то.
получается, что современные браузеры умеют отличать число от не числа, даже если оно, число, и не объявлено явно...

#61412
Termo написал:
выходит, что брешут книги-то.
получается, что современные браузеры умеют отличать число от не числа, даже если оно, число, и не объявлено явно...

да кто его знает? а если на IE?
а на IE5? а ведь есть ещё люди с IE5 (и IE6) :( сам видел в статистике своего форума...

#61430

Размер окна сообщения определяется размером текста сообщения.

выполняются одинаково?

Попробуйте в обоих примерах ввести вещественное число или текст.

#61435
Termo написал:
выполняются одинаково?
где подвох то?...
...получается, что современные браузеры умеют отличать число от не числа, даже если оно, число, и не объявлено явно...

Ничего удивительного. Это же javascript :D . Так и должно быть. Строгой типизации нет.

Попробуй умножить число на текст.

#62409

с вашего позволения продолжу...

вот конструкция:

text
if (!name)
name = "неизвестный";

не могу понять логику "!".
что он отрицает?

#62419

Если name не объявлен, то name = "неизвестный".
Не уверен, но выражение "!name" эквивалентно "name == undefined"

#62435


не могу понять логику "!"

! — это логический оператор отрицания. В вашем примере отрицается значение переменной 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'

#62476

SamuelLinux,
в примере суть такая

text
var name = prompt("Введите ваше имя");

if (!name) name = "неизвестный"; document.write("Привет, " "!");

если будет введено имя, то будет "Привет, Петя!"
если человек просто нажмет ОК или Cancel, то "Привет, неизвестный!"
вот я и пытаюсь понять логику кода.

переменная name
если значение переменной отрицается, т.е. не вводится в prompt, то оно (значение) становится равным "неизвестный", так?

#62486

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

#62532

спасибо!
с трудом но понял. smile
полагаю, что в данном случае выполнится тот код, где возвращаемое значение переменной name не будет равно лжи.
если значение ложно, то name == "неизвестный!"
если правда, то - введенное имя --> Привет, Петя!

к этому вопросу с двойной логикой нужно будет потом вернуться.
иначе будут проблемы в будущем....
это как с двойным отрицанием в английском языки --> I don't need no doctor. smile

#62721

Termo,
При чем тут "двойная логика"? Возьмите любую книгу для начинающих по любому (практически) языку прграммирования - там все доступно разжевано во избежане "проблем в будущем". Прочитаете - тогда такие вопросы (извините, ламерские) отпадут и возникать не будут. Попутно отпадет еще куча вопросов

#62772

Hvzh, хочу - задаю вопросы.
не хочу - не задаю.
есть проблемы?

Войдите или зарегистрируйтесь, чтобы ответить.