2015-06-26 4 views
2

Вопрос довольно прямолинейный. В Javascript, почему:Почему 'string' + undefined => 'stringundefined'?

'string' + undefined 
//=> 'stringundefined' 

я ожидал бы только string быть возвращены, или, по крайней мере, об ошибке, говорящее вы не можете преобразовать неопределенными в строковый тип данных.

+1

Он работает со всеми типами данных, тест для себя. 'string' + true = 'stringtrue'. 'string' + [1,2] = 'string1,2' и т. д. – Loocid

+1

Сумасшедший. ''string' + function myFunc() {} => 'stringfunction myFunc() {}''. –

+0

Прочитайте эту страницу для всех преобразований по умолчанию (принудительного) типа в javascript: http://www.w3schools.com/js/js_type_conversion.asp –

ответ

3

Поскольку вы выполняете конкатенацию, вынужден преобразование типа происходит. undefined преобразовывается в его строкового значения и добавляется к строке

'string' + undefined 

Step 1: 'string' 
Step 2: undefined -> 'undefined' 
Step 3: 'string' + 'undefined' 
2

Когда вы объединяете строки, каждый элемент получает отливку в строку, а undefined становится «undefined».

String(undefined); // "undefined"

2

интересный вопрос.

Поскольку ECMAScript использует внутреннюю операцию ToString для преобразования примитивов в строку.

undefined=> "undefined" 
    null=>"null" 
    boolean=>either "true" or "false" 
    number>the number as a string e.g. "1.765" 

http://www.2ality.com/2012/03/converting-to-string.html