JavaScript 数据类型(二)

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

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

查看所有标签

猜你喜欢:

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

Foundations of PEAR

Foundations of PEAR

Good, Nathan A./ Kent, Allan / Springer-Verlag New York Inc / 2006-11 / $ 50.84

PEAR, the PHP Extension and Application Repository, is a bountiful resource for any PHP developer. Within its confines lie the tools that you need to do your job more quickly and efficiently. You need......一起来看看 《Foundations of PEAR》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具