Object.getPrototypeOf()
定义:
Object.getPrototypeOf()
方法返回指定对象的原型
语法
Object.getPrototypeOf(object)
参数obj
要返回其原型的对象。
返回值
给定对象的原型。如果没有继承属性,则返回null
示例
const obj = {
x: 1,
y: 2,
}
obj.m = 5
obj.__proto__.z = 3
Object.getPrototypeOf(obj).w = 4 //可添加
const arr = Object.values(obj)
console.log(arr)
Object.keys()
- 该方法返回⼀个数组
- 该数组包含给定对象的自身可枚举属性名。
- 自身属性
- 可枚举属性。
语法:
Object.keys(obj)
参数obj:要返回其枚举自身属性的对象
- 返回值:一个表示给定对象的所有可枚举属性的字符串数组
示例
const obj = {
x:1,
y:2,
}
obj.x = 5
obj.__proto__.z = 3
Object.getPrototypeOf(obj).w = 4 //可添加
const arr = Object.keys(obj)
console.log(obj.__proto__)
Object.values()
定义:
- 该方法返回一个数组
- 该数组包含给定对象自身可枚举的属性值。
语法:
object.values(obj)
obj:被返回可枚举属性值的对象。
返回值
- 一个包含对象自身的所有可枚举属性值的数组。
示例
const obj = {
x: 1,
y: 2,
}
obj.m = 5
obj.__proto__.z = 3
Object.getPrototypeOf(obj).w = 4 //可添加
const arr = Object.values(obj)
console.log(arr)
Object.entries()
- 该方法返回⼀个数组
- 该数组包含给定对象的⾃身可枚举属性名和属性值
语法
Object.entries(obj)
参数obj: 可以返回其可枚举属性的键值对的对象。
返回值
给定对象自身可枚举属性的键值对数组
示例
const obj = {
x: 1,
y: 2,
}
obj.m = 5
obj.__proto__.z = 3
Object.getPrototypeOf(obj).w = 4 //可添加
const arr = Object.entries(obj)
console.log(arr)
Object.hasOwnProperty()
定义:检测⼀个属性是否是⾃身属性
语法
obj.hasOwnProperty(prop)
对象.hasOwnProperty(属性名)
参数prop: 要检测的属性的String字符串形式表示的名称,或者 Symbol。
返回值:布尔值
- true:表示该属性是对象的自身属性
- false:表示该属性不是对象的自身属性
用来判断某个对象是否含有指定的属性的布尔值Boolean
示例
//Object.hasOwnProperty()检查的⼀个属性是否是⾃身属性
const obj = {
x:1,
y:2
}
obj.o = 5
obj.__proto__.z = 3
Object.getPrototypeOf(obj).w = 4
//语法:对象.hasOwnProperty(属性名)
const r1 = obj.hasOwnProperty('o')//true
const r2 = obj.hasOwnProperty('w')//false
console.log(r1,r2);
Object.prototype.propertyIsEnumerable()
定义:该方法用于检测自身属性是否可枚举。
语法:
obj.propertyIsEnumerable(prop)
参数prop: 需要测试的属性名。
返回值:布尔值
- true
- false
示例
const obj = {
x:1,
y:2,
z:3,
}
Object.defineProperty(obj,'y',{
enumerable:false
})
const r1 = obj.propertyIsEnumerable('x')
const r2 = obj.propertyIsEnumerable('y')
const r3 = obj.propertyIsEnumerable('z')
console.log(r1,r2,r3)
Object.assing()
定义:
Object.assing()
方法将所有可枚举属性从一个对象复制到另一个对象。语法
Object.assign(obj1,obj2)
obj1: 目标对象
Obj2:源对象
返回值:修改后的对象
示例
const obj1 = {x:1}
const obj2 = {y:2,z:3}
obj2.__proto__.w = 4 //可枚举
// 赋值obj2的属性到obj1中
// 1.使用遍历做:1.迭代for...of 2.枚举for...in
// 方法1:for...in不适合
// for(key in obj2){ //遍历对象的可枚举属性(自身 + 继承)
// obj1[key] = obj2[key]
// }
// 方法2:for...of
// for(key of Object.keys(obj2)){
// obj1[key] = obj2[key]
// }
// 方法3:Object.assing()
Object.assign(obj1,obj2)
console.log(obj1) //输出{x:1,y:2,z:3}
Symbol
- Symbol是一种基本数据类型
- 返回一个具有唯一性的标识符
- Symbol是一种原始值
- 不支持new调用
语法
``js
Symbol([description])
参数
description:可选
可选的,字符串类型。对 symbol 的描述,可用于调试但不是访问 symbol 本身。
示例
```js
// 1.Number(任意)=> 原始值 2.new Number(任意)=>对象
const n1 = Number(100)
const n11 = Number( 100)
console.log(n1 === n11)
// const n2 = Number()
// console.log(n2)
// const n3 = Number(Infinity)
// console.log(n3)
// const n4 = Number(NaN)
// console.log(n4)
// const n5 = Number('100')
// console.log(n5)
// const n6 = Number('abc')
// console.log(n6)
// const n7 = Number({x:1})
// console.log(n7)
// const n8 = Number([])
// console.log(n8)
// 1.String() => 原始值 2.new String() => 对象
// const str1 = String('hello')
// const str2 = String('hello')
// console.log(str1 === str2) //true
// Symbol(字符串)返回一个具有唯一性的标识符
const str1 = Symbol('hello')
const str2 = Symbol ('hello')
console.log(str1 === str2)
// const str3 = new Symbol() //报错
const sym1 = Symbol()
const sym2 = Symbol()
const obj = {
x:1,
y:1,
[Symbol3]:'hello',
[Symbol4]:'wrold',
}
console.log(obj[sym3]);
console.log(obj[sym4]);
BigInt
含义:BigInt表示任意大的整数。
语法:
//字⾯法定义bigint
const bi1 = 10000000000n
//内置函数法
const bi2 = BigInt(1000000);//1000000n
const bi2 = BigInt('1000000');//1000000n
用法
- ①symbol之间可以做运算
- ②不可以使用math方法
- ③不能和number混合运算
- ④bigint可以和number做比较
示例
// BigInt表示任意大的整数
// // 字面量法定义bigint
// const b1 = 100000000n
// // 内置函数法
// const b2 = BigInt(1999) //1999n
// const b3 = BigInt('10000000') //10000000n
// console.log(b3)
// const b1 = 10n
// const b2 = BigInt(20)
// console.log(b2) //20n
// console.log(b1 + b2) //30n 1.可以做sybol运算
// console.log(typeof b1); //bigint
// // console.log(Math.abs(b1)) //2.大多数不可以使用Math方法
// console.log(b2 + 20);//3.不能和number混合运算
// console.log(20n === 20)
// console.log(20n == 20) //4.bigint可以和number做⽐较
const bi1 = BigInt(100n)
console.log(bi1)
注意
当使用 BigInt 时,带小数的运算会被取整。
- BigInt类型判断
typeof 123
// ↪ 'number'
typeof 123n
// ↪ 'bigint'
typeof BigInt(123)
// ↪ ''bigint'
BigInt总结
- BigInt不能和Number类型数据混合运算,两者必须转换成同一种数据类型。BigInt和Number联众类型互相转换时,要注意可能会丢失精度
- BigInt和Numner可以直接作大小比较。
- BigInt可以和大部分运算符一起使用,除了单独使用+,因为会默认强制转化类型。
- BigInt作为条件判断转为Boolean时,和Number类型一致。
- BigInt不能调用Math中的方法