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...in
、 for...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 数据类型(二)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 【数据类型】js的数据类型
- Python中不可变数据类型和可变数据类型
- 重学JS: 数据类型及类型检测
- JS专题之数据类型和类型检测
- 6. Go 语言数据类型:字典与布尔类型
- Redis 入门-数据类型:3 种特殊类型详解
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。