JavaScript, добавляющий логические значения

javascript

6727 просмотра

3 ответа

16610 Репутация автора

console.log(true+true); //2
console.log(typeof(true+true)); //number
console.log(isNaN(true+true)); //false

Почему сложение двух логических типов приводит к числу? Я вроде понимаю, что если бы они не равнялись (1/0 (двоичная?)), Было бы неловко пытаться выполнить арифметику с логическим типом, но я не могу найти причину этой логики.

Автор: Sterling Archer Источник Размещён: 12.12.2013 10:13

Ответы (3)


0 плюса

4846 Репутация автора

Javascript - это динамически типизированный язык, потому что вам не нужно указывать, что это за тип, когда вы запускаете, например bool xили int i. Когда он видит операцию, которая на самом деле не может быть выполнена, он преобразует операнды во все, что им нужно, чтобы они могли выполнить эту операцию над ними. Это известно как приведение типов. Вы не можете добавлять логические значения, поэтому Javascript будет преобразовывать логические значения во что-то, что он может добавить, что-то вроде строки или числа. В этом случае имеет смысл привести его к числу, поскольку 1 часто используется для представления истинного значения, а 0 - для ложного. Таким образом, Javascript будет приводить trues к 1s и складывать их вместе.

Автор: scrblnrd3 Размещён: 12.12.2013 10:16

0 плюса

3139 Репутация автора

Javascript свободно набирается, и он автоматически преобразует вещи в другие вещи, чтобы соответствовать ситуации. Вот почему вы можете обойтись var xбез определения его как intилиbool

http://msdn.microsoft.com/en-us/library/6974wx4d(v=vs.94).aspx

Автор: House- 'Reinstate Monica' -man Размещён: 12.12.2013 10:16

14 плюса

2964 Репутация автора

Решение

Это работает так, потому что так указано для работы.

Стандарт EcmaScript указывает, что если ни один из аргументов не является строкой, +предполагается , что оператор означает числовое сложение, а не конкатенацию строк. Преобразование в числовые значения явно упоминается:

Вернуть результат применения операции сложения к ToNumber (lprim) и ToNumber (rprim).

(где lprimи rprim- примитивные формы левого и правого аргумента соответственно)

EcmaScript также четко определяет To Numberпреобразование для логических значений:

Результат равен 1, если аргумент верен. Результат равен +0, если аргумент равен false.

Следовательно, true + trueэффективно означает 1 + 1, или 2.

Автор: kviiri Размещён: 12.12.2013 10:21
Вопросы из категории :
32x32