2013-08-26 2 views
1

Может кто-нибудь объяснить, почему этот JavaScript интерпретируется двумя разными способами?Почему этот JavaScript интерпретируется двумя разными способами?

Это:

var testnum = $("<div>00000001</div>").text(); 
var test = "claimid:" + + testnum; 
alert(test); 

Это бросает предупреждение, которое отображает: claimid: 1

Где это:

var testnum = $("<div>00000001</div>").text(); 
var test = "claimid:" + testnum; 
alert(test); 

Это бросает предупреждение, которое отображает: claimid: 00000001

Я получаю причину, почему второе рассматривает testnum как строку, но почему это tr есть testnum как число на первом.

+2

Потому что вы добавили оператора, который преобразуется в число. Вы обнаружите, что при использовании операторов они будут выполнять операции. ;-) –

ответ

4

У вас есть два плюсовых знака. Второй знак плюса - unary plus operator, который в Javascript имеет единственную цель преобразования его операнда в Number.

1

но почему он рассматривает testnum как номер на первом.

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

var test = "claimid:" + + testnum; 
//     ^HERE 

В любом случае, конкатенация имеет более высокий приоритет, чем числовое дополнение (если применимо), но в первом случае преобразует значение 00000001 в номер, поэтому отображается простой старый 1.

1

В первом случае + интерпретируется как унарный положительный оператор. Рассмотрим x = -5. У - унарный отрицательный оператор. + принимает значение и возвращает его числовое значение.