2023-02-09 继承

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中的方法
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 201,784评论 5 474
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,745评论 2 378
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,702评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,229评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,245评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,376评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,798评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,471评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,655评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,485评论 2 318
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,535评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,235评论 3 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,793评论 3 304
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,863评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,096评论 1 258
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,654评论 2 348
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,233评论 2 341

推荐阅读更多精彩内容