Blog
首页
文档
收藏
关于
  • 在线转换时间戳 (opens new window)
  • 在线压缩图片 (opens new window)
  • Float-Double转二进制 (opens new window)
  • 文件转Hex字符串 (opens new window)

HiuZing

🍑
首页
文档
收藏
关于
  • 在线转换时间戳 (opens new window)
  • 在线压缩图片 (opens new window)
  • Float-Double转二进制 (opens new window)
  • 文件转Hex字符串 (opens new window)
  • 前端面试题

  • JavaScript

    • JavaScript语法

      • JavaScript-数据类型
      • JavaScript-ES6编程风格
      • JavaScript-异步编程
      • JavaScript-Promise
      • JavaScript-Proxy
      • JavaScript-Reflect
      • JavaScript-Iterator
      • JavaScript-Module
      • JavaScript-拷贝
      • JavaScript-this
      • JavaScript-垃圾回收机制
      • JavaScript-闭包
      • let和const
      • JavaScript-参数默认值
      • JavaScript-rest
      • JavaScript-扩展运算符
      • JavaScript-Symbol
        • Symbol特点
        • Symbol创建对象属性
        • Symbol内置值
      • JavaScript-生成器
      • JavaScript-class类
      • JavaScript-数值扩展
      • JavaScript-高阶函数
      • JavaScript-箭头函数
    • JavaScipt对象

    • JavaScript实例

    • JavaScript浏览器BOM

    • JavaScript DOM

  • Vue2

  • port

  • CSS

  • Node.js

  • JavaScript优化

  • uniapp

  • Mini Program

  • TypeScript

  • 面向对象编程

  • UI组件

  • Plugin

  • Vue3

  • 性能优化

  • Axios

  • 状态管理

  • React

  • Mock

  • Icon

  • Template

  • 构建工具

  • 项目规范配置

  • Taro

  • SVG

  • React Native

  • 前端
  • JavaScript
  • JavaScript语法
HiuZing
2023-04-06
目录

JavaScript-Symbol

表示独一无二的值,类似于字符串的数据类型

# Symbol特点

  1. Symbol的值是唯一的,用来解决命名冲突的问题
  2. Symbol值不能与其他数据进行运算
  3. Symbol 定义的对象属性不能使用 for...in 循环遍历,但是可以使用Reflect.ownKeys 来获取对象的所有键名
// 创建Symbol
let s = Symbol()

let s2 = Symbol('哈哈')
let s3 = Symbol('哈哈')
console.log(s2 === s3) // false

// Symbol.for 创建
let s4 = Symbol.for('hh')
let s5 = Symbol.for('hh')
console.log(s4,tyoeof s4) // Symbol('hh') "symbol"
console.log(s4 === s5) // true
1
2
3
4
5
6
7
8
9
10
11
12

# Symbol创建对象属性

// 向对象添加方法 up down
let game = {

}
// 不确定game对象里面,是否跟我即将创建方法的名字冲突
// 可以使用Symbol
let methods = {
    up:Symbol(),
    down:Symbol()
}
game[methods.up] = function(){
    
}
game[methods.down] = function(){
    
}

// 为youxi添加独一无二的方法
let youxi = {
    name:"hh",
    [Symbol('say')]:function(){
        
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

# Symbol内置值

Symbol.hasInstance 用于判断某对象是否为某构造器的实例,当其他对象使用instanceof运算符判断。

class Person{
    static [Symbol.hasInstance](param){
        console.log(param)
        console.log("我被用来检测类型")
    }
}

let o = {}
console.log(o instanceof Person) // false //我被用来检测类型
1
2
3
4
5
6
7
8
9

**Symbol.isConcatSpreadable**用于配置某对象作为Array.prototype.concat() (opens new window)方法的参数时是否展开其数组元素。

const arr = [1,2,3]
const arr2 = [4,5,6]
arr2[Symbol.isConcatSpreadable] = false
console.log(arr.concat(arr2 ))
1
2
3
4

**Symbol.unscopables**该对象指定了使用 with 关键字时,哪些属性会被 with环境排除。 **Symbol.match**当执行str.match(myObject)时,如果该属性存在,会调用它,返回该方法的返回值。 Symbol.replace 当该对象被str.replace(myObject)方法调用时,会返回该方法的返回值。 Symbol.search 当该对象被 str.search (myObject)方法调用时,会返回该方法的返回值。 **Symbol.split**当该对象被 str.split (myobject)方法调用时,会返回该方的返回值。

上次更新: 2024/08/14, 04:14:33
JavaScript-扩展运算符
JavaScript-生成器

← JavaScript-扩展运算符 JavaScript-生成器→

最近更新
01
React Native 使用SVG
08-13
02
Docker基础命令
08-04
03
算数逻辑单元
07-30
更多文章>
Theme by Vdoing | Copyright © 2021-2024 WeiXiaojing | 友情链接
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式