美文网首页
valueOf() toString()的另类解读

valueOf() toString()的另类解读

作者: 两朵小黑云 | 来源:发表于2020-08-14 14:00 被阅读0次

1. 引子

请说出以下代码输出的内容

console.log([] + [])
console.log({} + [])
console.log([] == ![])
console.log(true + false)

2. 答案

  • 首先你要知道的是,包装类型在运算的时候,会先调用valueOf方法,如果valueOf返回的还是包装类型,那么在调用toString方法

valueOf()方法返回指定对象的原始值 - MDN官方解释

image.png

toString()方法返回一个表示该对象的字符串 - MDN官方解释
描述:每个对象都有一个 toString() 方法,当该对象被表示为一个文本值时,或者一个对象以预期的字符串方式引用时自动调用。默认情况下,toString() 方法被每个 Object 对象继承。如果此方法在自定义对象中未被覆盖,toString() 返回 "[object type]",其中 type 是对象的类型

栗子

var o = new Object();
o.toString(); // returns [object Object]

var toString = Object.prototype.toString;
toString.call(new Date); // [object Date]
toString.call(new String); // [object String]
toString.call(Math); // [object Math]

//Since JavaScript 1.8.5
toString.call(undefined); // [object Undefined]
toString.call(null); // [object Null]
  • ok
    那么现在的情况是什么?
//首先
[] = [].valueOf() // [] 发现还是[] 这是便会调用toString()方法
// 数组 toString 默认会将数组各项使用逗号 "," 隔开, 比如 [1,2,3].toSting 变成了"1,2,3",空数组 toString 就是空字符串
[] = [].toString() // ''
//so? 以上相当于
console.log(''+'') //''
//请举一反三 朋友
let o = {}
console.log(o.valueOf()) // {}
console.log(o.toString()) // [object Object]
console.log({} + []) // [object Object]
// 继续
//两个基本类型相加,如果其中一方是字符,则将其他的转换为字符相加,否则将类型转换为Number,然后相加, Number(true) 是1, Number(false)是0, 所以结果是 1
console.log(![]) //false
console.log(Number(false)) //0
console.log(Number('')) //0
console.log(0 == 0) // true
//继续
console.log(true + false) // 0 + 1 = 1

结语

就像是一场梦,醒来还是很感动

相关文章

  • valueOf() toString()的另类解读

    1. 引子 请说出以下代码输出的内容 2. 答案 首先你要知道的是,包装类型在运算的时候,会先调用valueOf方...

  • JavaScript-数组方法汇总

    valueOf()、toString() valueOf()和toString()是JavaScript对象的通用...

  • JS转换为基础类型

    输出对象先toString再valueOf 先调用toString,若返回基础类型,则输出 若toString返回...

  • js高级程序设计笔记7

    转换 所有对象都有toString(),toLocaleString(),valueOf() 方法

  • valueOf 和 toString

    任何对象都会有valueOf和toString方法 常见内置对象:Date, Array, Math, Numbe...

  • valueof 和toString

    var a = new String( "abc" );的值应当是什么。a是一个对象。一个基本类型值的封装对象。 ...

  • valueOf() 和 toString()

    对象在转换基本类型时,首先会调用 valueOf 然后调用 toString。并且这两个方法你是可以重写的。 va...

  • toString valueOf 方法

    toString 方法返回 对象字符串valueOf()方法:返回指定对象的原始值。 看下面这个奇怪的例子:你是不...

  • toString()和valueOf()之间的区别

    toString()和valueOf()都是对象的方法。toString()方法返回反映这个对象的字符串。valu...

  • js的类型转换

    js类型转换 1 用于类型转换的valueOf和toString valueOf()的意义是,返回这个对象逻辑上对...

网友评论

      本文标题:valueOf() toString()的另类解读

      本文链接:https://www.haomeiwen.com/subject/grsgdktx.html