深入 探究 JavaScript

深入探究 JavaScript

instanceof

  • 运算符用于检测构造函数prototype 属性是否出现在某个 实例对象原型链上。
// 手写一个 instanceof 
function MyinstanceOf(child, parent) {
    if (typeof child != 'object' || child == null) return false;
    let proto = Object.getPrototypeOf(child);
    while (true) {
        if (proto === null) return false;
        if (proto === parent.prototype) return true;
        proto = Object.getPrototypeOf(proto);
    }
}

Object.getPrototypeOf ({})

  • 该方法返回指定对象原型(内部[[Prototype]]属性的值)。
    let obj = {
        name: "小黑",
        gender: 1,
        age: 13
    }
    console.log(Object.getPrototypeOf(obj));
    

在这里插入图片描述

Object.defineProperty()

  • 直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回此对象
    1. configurable 该属性的描述符是否可修改
    2. enumerable 是否可枚举
    3. value
    4. writable 值是否可修改
    // 禁止对 obj 的 name 属性进行描述符设置 
    Object.defineProperty(obj, 'name', {
        configurable: false,
    })
    // 设置的 时候报错 
    Object.defineProperty(obj, 'name', {
        enumerable: false,
    })
    
    在这里插入图片描述
    	// 允许 对 obj 的 name 属性进行属性设置 
    Object.defineProperty(obj, 'name', {
        configurable: true,
    })
    // obj 的 name 属性不可被枚举 
    Object.defineProperty(obj, 'name', {
        enumerable: false,
    })
    
    for (let item in obj) {
        console.log(item); // 输出 gender age
    }
    
    	// 允许 对 obj 的 name 属性进行属性设置 
    Object.defineProperty(obj, 'name', {
        configurable: true,
    })
    // obj 的 name  value 值不可被修改 
    Object.defineProperty(obj, 'name', {
        writable: false,
    })
    obj.name = '小白';
    
    console.log(obj);
    
    在这里插入图片描述

Object.getOwnPropertyDescriptors()

  • 方法用来获取一个对象的所有自身属性的描述符。

    console.log(Object.getOwnPropertyDescriptors(obj));
    

    在这里插入图片描述
    Object.create()

  • 方法创建一个新对象,使用现有的对象来提供新创建的对象的__proto__

  • 可以用它实现继承。

  • 两个参数,一个传入对象,一个传入Object.getOwnPropertyDescriptors()的第二个属性,新创建的对象添加指定的属性值和对应的属性描述符

    		let obj2 = Object.create(obj, {
    	    addr: {
    	        configurable: true,
    	        enumerable: false,
    	        writable: true,
    	        value: 'bj'
    	    }
    	})
    

在这里插入图片描述

Reflect.ownKeys()

  • 返回一个由目标对象自身的属性键组成的数组。

    	console.log(Reflect.ownKeys(obj));
    

    在这里插入图片描述
    slice

  • 提取字符串的 一部分 如果是负数 (负数加上字符串长度)

    	let str = 'hello world';
    	console.log(str.slice(0,-6)); // hello
    

数据类型转换

  • 强制数据类型转换
    • Number() ParentInt() ParentFloat() toString() String() Boolean()
    • Number() 方法转换 Symbal类型 会报错
    • 6大假值 null undefined '' 0 NaN false
  • 隐式类型转换
    • == 转换规则
      1. 其中一边为 nullundefined ,另一边必须为 nullundefind 否则 返回 false
      2. 其中一边为 boolean 类型 ,那么转换成 number
      3. 如果一边为 object 另一边为 string number symbol ,把object 转换成 基本数据类型再进行转换
      4. 如果两边操作值为 numberstring 类型 ,都转成 number 进行比较
    • + 转换规则
      1. 不能把BigIntNumber类型直接混合相加
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值