Задать вопрос
partyzanx
@partyzanx

Почему такое поведение при приведении объектов к примитиву?

Привет всем! Прохожу тему "Преобразование объектов к примитивам". Прошу ответить на следующие вопросы:


let obj1 = {
name: 100,
valueOf() {return this.name}, 
};

$('#b1').append( '1:  ' + typeof obj1 ); // Почему выводит object?? Ведь такого типа нет, есть [object Object]
console.log(typeof obj1); // object

/////////////////////////////////////////////////////////

let obj2 = {
name: 'John',
valueOf() {return this[0]}, 
};

$('#b2').append( '2:  ' + typeof obj2 ); // Почему выводит object? Ведь такого типа нет, есть [object Object]
console.log(typeof obj2); // object
/////////////////////////////////////////////////////////

let obj3 = {
name: 1, 
toString() {return this.name}, 
};

$('#b3').append( '3:  ' + obj3 + 1 ); // Почему выводит 2 в console.log, а не 11, а в append 11 ??
console.log(obj3 + 1); // 2
/////////////////////////////////////////////////////////

let obj4 = {
name: 1,
valueOf() {return 'xxx'}, 
toString() {return 'yyy'}, 
};

$('#b4').append( '4:  ' + obj4 + 1 );  // Почему выводит xxx1 ? Ведь 'xxx' - это строка
console.log(obj4 + 1); //xxx1
/////////////////////////////////////////////////////////

let obj5 = {
name: 1,
valueOf() {return 'xxx'}, 
toString() {return 'yyy'}, 
};
 let akr = obj5.toString();
$('#b5').append( '5:  ' + akr ); // А тут почему выводит yyy методом alert() и append jQuery, а в console.log выводит {name: 1, valueOf: ƒ, toString: ƒ} ?
console.log(obj5 ); /* Object
name: 1
toString: ƒ toString()
valueOf: ƒ valueOf()
__proto__: Object */
/////////////////////////////////////////////////////////

let obj6 = {
name: 'John',
valueOf() {return 'xxx'}, 
toString() {return 'yyy'}, 
};

$('#b6').append( '6:  ' + obj6 + 'John' ); // А тут почему выводит xxxJohn ? Тут же есть строка 'John', должен дёргать метод toString() 
console.log(obj6 + 'John' ); // xxxJohn

/////////////////////////////////


let obj7 = {
name: 'John',
valueOf() {return true}, 
toString() {return 'yyy'}, 
};
$('#b7').append( '7:  ' );
$('#b7').append(  obj7 + 1 ); // 2
console.log(obj7 + 1 ); // 2


/////////////////////////////////


let obj8 = {  
toString() {return 'yyy'}, 
};
$('#b8').append( '8:  ' );
$('#b8').append( obj8 ); // Почему здесь пустота?  Почему не преобразует в примитив?
console.log( obj8 ); // Почему выводити объект? {valueOf: ƒ, toString: ƒ}
  • Вопрос задан
  • 86 просмотров
Подписаться 1 Простой 1 комментарий
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы