JavaScript 数据类型(二)

栏目: JavaScript · 发布时间: 5年前

内容简介:ECMAScript中的对象就是一组数据和功能的集合。表示独一无二的值。是一种基本数据类型。每个从围绕原始数据类型创建一个显式包装器对象从 ECMAScript 6 开始不再被支持。 然而,现有的原始包装器对象,如 new Boolean、new String以及new Number因为遗留原因仍可被创建。

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 数据类型(二)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

数据结构基础

数据结构基础

[美]Ellis Horowitz 霍罗维兹 / 朱仲涛 / 清华大学出版社 / 2009-3 / 49.00元

《数据结构基础(C语言版)(第2版)》是最经典数据结构教材的最新版本,国内外大多数的同类教材都是以《数据结构基础(C语言版)(第2版)》为蓝本编写而来的。《数据结构基础(C语言版)(第2版)》用C作为描述语言,全面而生动地介绍了数据结构的有关知识,如数组、栈、队列、链表、树和图,以及构成所有软件基础的排序散列技术。此外,《数据结构基础(C语言版)(第2版)》还介绍了各种高级或特殊数据结构,如优先级......一起来看看 《数据结构基础》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

MD5 加密
MD5 加密

MD5 加密工具

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具