2014-11-28 8 views
-1
+true // result: 1 

true.valueOf() // result: true 

+true === true.valueOf() // result: false 

В Javascript Type Coersion функция, вызываемая для оценки, является значениемOf(). Но если функция называется explicity, она возвращает другое значение.Почему + true не равен true.valueOf?

+4

Не понимаю. '+ true' берет логическое число. 'true.valueOf()' возвращает 'true'. Конечно, '1' не ** строго соответствует **' true'. – deceze

+0

Вы сравниваете логические и целочисленные значения и задаетесь вопросом, почему это не то же самое? Какой был вопрос? – feeela

+0

Зачем true.valueOf() не возвращает 1 – Vijay

ответ

0

функция, вызываемая для оценки является valueOf()

Не всегда. valueOf() имеет смысл только для непримитивных типов, поскольку он определен как возвращающее примитивное значение данного объекта. true сам по себе является булевым примитивом, и в этом случае вызов true.valueOf() будет полностью избыточным.

Унарные + и - знаковые операторы всегда возвращают число по определению. Поскольку булева вполне удобно преобразуется в число, оно имеет смысл, что +true возвращает 1.

Там нет никаких оснований +true и true.valueOf() оба должны соответствовать одному и тому же значению только.

3

Тип Coверсия в Javascript бывает, если используется ==, что составляет kinda loose сравнение оператор.

=== является оператор строгого сравнение, которое не принуждать типов при сравнении с тем, что остается целым числом, а другой BOOL

+true === true.valeOf() // false 
+true == true.valueOf() // true 

Docs:

Идентичность (= ==) оператор ведет себя идентично оператору равенства (==) , за исключением того, что преобразование типа не выполняется, и типы должны быть одинаково считается равным.

Почему true.valueOf() не возвращает 1

Ответ является true.valueOf возвращает true, который является примитивным значением булева объекта. Кроме того, цитата из MDN

Метод valueOf булевых возвращает примитивное значение объекта Логическое или буквального Boolean в качестве логического типа данных.

Что +true сделать:

+true такой же, как Number(true) и это хорошо известный факт, что 0 является false и 1 является true почти на всех языках. На самом деле в C++ они : используются как булевы.

+2

@WBAR Что? Экземпляр X может быть значением Y. Что вы имели в виду? – feeela

+0

Я думаю, что OP понимает, как работает '===', и спрашивает, почему' + true' не возвращает то же самое, что и 'true.valueOf()'. – BoltClock

+0

@BoltClock надеется, что мое редактирование решает сомнения OP –

0

для строгого сравнения вы должны сделать так:

Number(true.valueOf()) === +true