资讯专栏INFORMATION COLUMN

JavaScript 数据类型(二)

SimpleTriangle / 3013人阅读

摘要:用于检查传入的对象是否是当前对象的原型。返回对象的字符串数值或布尔值表示。类型表示独一无二的值。是一种基本数据类型。一个值能作为对象属性的标识符这是该数据类型仅有的目的。围绕原始数据类型创建一个显式包装器对象从开始不再被支持。

Object 类型

ECMAScript中的对象就是一组数据和功能的集合。

创建对象
const o = new Object();
const o = new Object; // 有效,但不推荐省略圆括号
const o = {};
实例属性和方法:

constructor: 构造函数。

hasOwnProperty(propertyName): 检查 propertyName (传入的属性)在当前对象实例中(不是实例原型中)是否存在。

isPrototypeOf(object): 用于检查传入的对象是否是当前对象的原型。

propertyIsEnumerable(propertyName): 检查 propertyName (传入的属性)是否能够使用 for-in 语句枚举。

toLocaleString(): 返回对象的字符串表示,该字符串与执行环境的地区对应。

toString(): 返回对象的字符串表示。

valueOf(): 返回对象的字符串、数值或布尔值表示。通常与toString()返回值相同。

const o = new Object();
console.log(o.toLocaleString()); // "[object Object]"
console.log(o.toString()); // "[object Object]"
console.log(o.valueOf()); // "{}"
Symbol 类型

表示独一无二的值。是一种基本数据类型。每个从Symbol()返回的symbol值都是唯一的。一个symbol值能作为对象属性的标识符;这是该数据类型仅有的目的。它不支持语法:new Symbol()
围绕原始数据类型创建一个显式包装器对象从 ECMAScript 6 开始不再被支持。 然而,现有的原始包装器对象,如 new Boolean、new String以及new Number因为遗留原因仍可被创建。

创建 Symbol([description])

description: 可选的字符串。symbol的描述,可用于调试(控制台显示、转为字符串等)但不能访问symbol本身。
如果 Symbol 的参数是一个对象,就会调用该对象的toString方法,将其转为字符串,然后才生成一个 Symbol 值。

var sym1 = Symbol();
var sym2 = Symbol("foo");
var sym3 = Symbol("foo");

typeof sym1 // "symbol"

sym1 // Symbol()
sym2 // Symbol("foo")
sym3 // Symbol("foo")

sym1.toString() // "Symbol()"
sym2.toString() // "Symbol(foo)"
sym3.toString() // "Symbol(foo)"

sym2 === sym3 // false

var sym = new Symbol(); // TypeError

// 创建一个Symbol包装器对象
var sym = Symbol("foo");
typeof sym;     // "symbol"
var symObj = Object(sym);
typeof symObj;  // "object"

// 运算
`your symbol is ${sym}`
// TypeError: can"t convert symbol to string
Boolean(sym) // true
Number(sym) // TypeError
Symbol.for([description])

Symbol.for()与Symbol()这两种写法,都会生成新的 Symbol。它们的区别是,前者会被登记在全局环境中供搜索,后者不会。Symbol.for()不会每次调用就返回一个新的 Symbol 类型的值,而是会先检查给定的key是否已经存在,如果不存在才会新建一个值。

Symbol.for("bar") === Symbol.for("bar"); // true
Symbol.for() === Symbol.for(); // true

Symbol("bar") === Symbol("bar"); // false
Symbol.prototype.description

获取Symbol 的描述。ES2019提供的一个实例属性。

const sym = Symbol("foo");

sym.description // "foo"
Symbol.keyFor()

返回一个已登记的 Symbol 类型值的key。

Symbol.keyFor(); // TypeError

const sym1 = Symbol("a");
Symbol.keyFor(sym1); // undefined

const sym2 = Symbol.for("b");
Symbol.keyFor(sym2); // "b"
Object.getOwnPropertySymbols()

获取指定对象的所有 Symbol 属性名。因为Symbol 作为属性名,该属性不会出现在for...infor...of循环中,也不会被Object.keys()Object.getOwnPropertyNames()JSON.stringify()返回。

const obj = {};
let a = Symbol("a");
let b = Symbol("b");

obj[a] = "Hello";
obj[b] = "World";

for (let i in obj) {
  console.log(i); // 无输出
}

Object.getOwnPropertyNames(obj); // []

Object.getOwnPropertySymbols(obj); // [Symbol(a), Symbol(b)]
Reflect.ownKeys()

返回所有类型的键名,包括常规键名和 Symbol 键名。

const obj = {
  [Symbol("a")]: 1,
  name: "Ashin",
  age: 3
};

Reflect.ownKeys(obj); // ["name", "age", Symbol(a)]
内置的 Symbol 值

...

参考

《JavaScript高级程序设计》(第三版)
ECMAScript 6 入门 - 阮一峰

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/105014.html

相关文章

  • 数据类型

    摘要:定义什么是数据类型数据类型,就是将数据按照某一规则进行区别时所定义的分类标签。中的数据类型为什么称为弱类型语言中变量是没有类型的,只有值才有。有哪些数据类型在中,共有七种数据类型,其中,六种是基本原始类型,一种是对象复合引用类型。 showImg(https://segmentfault.com/img/remote/1460000017215604); 定义 1. 什么是数据类型? ...

    Tecode 评论0 收藏0
  • 数据类型

    摘要:中的数据类型为什么称为弱类型语言中变量是没有类型的,只有值才有。有哪些数据类型在中,共有七种数据类型,其中,六种是基本原始类型,一种是对象复合引用类型。因此,我们可以写一个函数,用来精确检测类型。 showImg(http://upload-images.jianshu.io/upload_images/7803415-2bbe6fd5fdeebe0d.jpg?imageMogr2/a...

    CarlBenjamin 评论0 收藏0
  • 进击的 JavaScript) 之 数据结构

    摘要:的垃圾回收器,进行回收。它们的数据就存放在堆内存中,大小不一定,动态分配内存,可随时修改。引用类型的变量存的是其在堆内存中的地址,值的读取,就是读取这个内存地址中储存的内容。 这东西还是很重要的,你要是搞懂了,就会去除很多困惑,比如不知道大家在学习js 的时候,有没有对 基础类型 和 引用类型 感到困惑过,两者之间 表现的不同之处。 js 不同其他编程语言,它是脚本语言。所以,它的数...

    BlackFlagBin 评论0 收藏0
  • 前端进击的巨人():栈、堆、队列、内存空间

    摘要:中有三种数据结构栈堆队列。前端进击的巨人一执行上下文与执行栈,变量对象中解释执行栈时,举了一个乒乓球盒子的例子,来演示栈的存取方式,这里再举个栗子搭积木。对于基本类型,栈中存储的就是它自身的值,所以新内存空间存储的也是一个值。 面试经常遇到的深浅拷贝,事件轮询,函数调用栈,闭包等容易出错的题目,究其原因,都是跟JavaScript基础知识不牢固有关,下层地基没打好,上层就是豆腐渣工程,...

    edgardeng 评论0 收藏0
  • 33 个 js 核心概念():数据类型

    摘要:举个例子在上面的例子可以看到,我们声明是一个数字,但是我们在之后将的值又改成了字符串和布尔值后面会讲这些类型。基本类型字符串表示一个字符串,如。因此,我们可以写一个函数,用来精确检测类型。 showImg(https://segmentfault.com/img/remote/1460000017309509?w=850&h=572); 定义 1. 什么是数据类型? 数据类型,就是将...

    QiShare 评论0 收藏0
  • JavaScript 数据类型

    摘要:用于检查传入的对象是否是当前对象的原型。返回对象的字符串数值或布尔值表示。类型表示独一无二的值。是一种基本数据类型。一个值能作为对象属性的标识符这是该数据类型仅有的目的。围绕原始数据类型创建一个显式包装器对象从开始不再被支持。 Object 类型 ECMAScript中的对象就是一组数据和功能的集合。 创建对象 const o = new Object(); const o = new...

    maxmin 评论0 收藏0

发表评论

0条评论

SimpleTriangle

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<