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

相关推荐
风骏时光牛马8 分钟前
从零到实战,完整AI学习路线
前端
星辰徐哥15 分钟前
本地视频预览别只自己看:把Remotion动效项目发给客户远程验收
docker·ai·node.js·html·音视频·react·remotion
三十而立洋37 分钟前
深入理解 Monorepo:子包安装依赖
前端·前端工程化
IT_陈寒42 分钟前
Java Stream处理大集合,我的内存怎么就炸了
前端·人工智能·后端
Captaincc1 小时前
AI 用量桌面端-桌面宠物自定义指南
前端·人工智能
OpenTiny社区1 小时前
码力全开,智启前端新生态|OpenTiny 登陆华为全联接大会2026
前端·github
妙码生花1 小时前
利用AI从零学Go并完成实战项目,完工总结:目录结构
前端·后端·go
妙码生花1 小时前
利用AI从零学Go并完成实战项目,完工总结:商业级开源产品定位和核心特性介绍
前端·后端·go
Captaincc2 小时前
掘金AI用量统计v0.1.0大更新-支持桌面宠物自定义和订阅额度卡片
前端·后端
默_笙2 小时前
🚲 从写信到打电话:WebSocket 双工通信与跨域方案的"通信进化史"
前端·javascript