ES6数组判断以及原始值转换

一. 数组判断

  1. 情况一
js 复制代码
const target = {}

function isArray(target) {
    return Object.prototype.toString.call(target) === "[object Array]"
}
console.log(isArray(target)) // false
js 复制代码
const target = {
    [Symbol.toStringTag]: "Array",
}

function isArray(target) {
    return Object.prototype.toString.call(target) === "[object Array]"
}
console.log(isArray(target)) // true

  1. 情况二
js 复制代码
const target = {}

function isArray(target) {
    return target instanceof Array
}

console.log(isArray(target)) // false
js 复制代码
const target = {}
Object.setPrototypeOf(target, Array.prototype)
function isArray(target) {
    return target instanceof Array
}

console.log(isArray(target)) // true

使用ES6

js 复制代码
const target = {
    [Symbol.toStringTag]: "Array",
}

Object.setPrototypeOf(target, Array.prototype)

function isArray(target) {
    return Array.isArray(target)
}

console.log(isArray(target)) // false

二. 原始值转换

  1. 情况一
js 复制代码
const target = {}
console.log(target.toString()) // [object Object]
console.log(target + 1) // [object Object]1
  1. 情况二
js 复制代码
const target = {
    toString() { return 1 },
}
console.log(target.toString()) // 1
console.log(target + 1) // 2
  1. 情况三
js 复制代码
const target = {
    toString() { return 1 },
    valueOf() {
        return 2
    },
}
console.log(target.toString()) // 1
console.log(target + 1) // 3
  1. 情况四 参考mdn
js 复制代码
const target = {
    toString() { return 1 },
    valueOf() {
        return 2
    },
    [Symbol.toPrimitive](hint) {
        return 3
    },
}
console.log(target.toString()) // 1
console.log(target + 1) // 4

原始值强制转换优先权重:[Symbol.toPrimitive] > valueOf > toString

相关推荐
程序猴老王16 分钟前
el-select 和el-tree二次封装
前端·vue.js·elementui
blzlh27 分钟前
手把手教你做网易云H5页面,进大厂后干的第一件事
前端·javascript·css
贩卖纯净水.1 小时前
网站部署及CSS剩余模块
前端·css
Justinc.1 小时前
CSS3_BFC(十二)
前端·css·css3
梅子酱~1 小时前
Vue 学习随笔系列十七 -- 表格样式修改
javascript·vue.js·学习
刺客-Andy1 小时前
React第四节 组件的三大属性之state
前端·javascript·react.js
黄毛火烧雪下1 小时前
React 表单Form 中的 useWatch
前端·javascript·react.js
爱健身的小刘同学2 小时前
钉钉免登录接口
前端·javascript·钉钉
啵咿傲2 小时前
跨域相关的一些问题 ✅
前端
命运之光2 小时前
生日主题的烟花特效HTML,CSS,JS
前端·javascript·css