首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

可选链运算符(?.)

背景: 在 ES2020 之前,如果要访问 JavaScript 中对象的嵌套属性,则必须在每个级别检查是否为 null 或 undefined,否则最终将会抛出 TypeError。...运算符,JavaScript 会在尝试访问 obj.first.second 之前,先隐式地检查并确定 obj.first 既不是 null不是 undefined。...如果obj.first 是 null 或者 undefined,表达式将会短路计算直接返回 undefined。...(); 注: 如果存在一个属性名且不是函数,使用 ?. 仍然会产生一个 TypeError 异常 (x.y is not a function). 处理可选的回调函数或者事件处理器 使用?....name; 短路计算 当在表达式中使用可选链时,如果左操作数是 null 或 undefined,表达式将不会被计算,例如: let potentiallyNullObj = null; let x =

1.1K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    TypeError: Object of type float32 is not JSON serializable

    float32是NumPy库中的一种浮点数数据类型,它用于在计算中存储单精度浮点数。...尽管这种数据类型在科学计算和机器学习任务中非常常见,但由于不是Python的内置数据类型,因此json模块无法直接将其转换为JSON。如何解决这个错误?...结论TypeError: Object of type 'float32' is not JSON serializable错误通常发生在尝试将float32类型的对象转换为JSON格式时。...它使用人类可读的文本来描述数据对象,通常以.json作为文件扩展名。JSON数据由键值对构成,其中键是字符串,值可以是字符串、数字、布尔值、对象、数组或null。...然而,float32数据类型在默认情况下不是JSON可序列化的,因为JSON标准只定义了有限的数据类型(字符串、数字、布尔值、对象、数组和null)。

    68310

    2022秋招前端面试题(九)(附答案)

    __proto__ === p.constructor.prototype) // false复制代码可以看到修改原型的时候p的构造函数不是指向Person了,因为直接给Person的原型对象直接用对象赋值时...乘法计算时,只计算小数位,整数位用作每一位的二进制,并且得到的第一位为最高位。...new TypeError('this is null or not defined'); } if(typeof callback !...Array.prototype.map1 = function(callback, thisArg) { if(this == null) { throw new TypeError...但这还不是问题的关键,模板字符串的关键优势有两个:在模板字符串中,空格、缩进、换行都会被保留模板字符串完全支持“运算”式的表达式,可以在${}里完成一些计算基于第一点,可以在模板字符串里无障碍地直接写

    2.6K30

    从ECMAscript标准文档看懂valueOf

    翻译过来就是: 参数类型 返回结果 Undefined 抛出 TypeError 异常 Null 抛出 TypeError 异常 Boolean 创建一个Boolean对象,初始值为参数值 Number...大致意思是说 internal slots 不是对象的属性,不会被继承,初始值都是未定义的。...因此根据上述的查阅取证,总结一下 valueOf: 定义在 Object 的原型上的 valueOf 方法内部调用了内部的方法 ToObject(),而 ToObject() 方法除了 Undefined 和 null...而 Boolean 、Number、String、Symbol、Date对象的原型则重写了 valueOf 方法,且传入不是该类型的参数参数时会报错,列表为: Object.prototype.valueOf...参数类型 返回结果 Undefined 抛出 TypeError 异常 Null 抛出 TypeError 异常 Boolean 创建一个Boolean对象,初始值为参数值 Number 创建一个Number

    79610

    JS 原生方法原理探究(二):如何实现 Object.create?

    我简单翻译一下这段话: create() 方法会创建一个具有指定原型的新对象,当调用该方法的时候,会有如下步骤: 如果传入的参数 O 不是对象不是 null,抛出 TypeError 错误 令 obj...=== null){ throw 'TypeError' } let obj = {} obj....不过,我们要留意两个地方: 在这个实现中,没有检测第一个参数是不是基本类型的包装对象,只要传进来的参数是对象,我们就认为是合法的 当传入 null 也即 Object.create(null) 的时候,...这似乎说明,用 null 重写 F 的原型后,新创建的实例的 __proto__ 并不是 null —— 事实上确实不是。...由于我们这里是通过 new 构造函数的方式创建新对象(而不是像之前那样通过对象字面量的形式),所以在 new F 的时候,内部会检测 F 的原型是不是对象,如果不是对象,那么会把实例的 __proto_

    1.9K21

    ES6 对象都新增了哪些属性

    如果目标对象和源对象有同名属性,或者多个源对象有同名属性,则后面的属性会覆盖前面的属性。 如果该函数只有一个参数,当参数为对象时,直接返回该对象;当参数不是对象时,会先将参数转为对象然后返回。...和 undefined 不能转化为对象,所以会报错: Object.assign(null); // TypeError: Cannot convert undefined or null...to object Object.assign(undefined); // TypeError: Cannot convert undefined or null to object 当参数不止一个时...,null 和 undefined 不放第一个,即不为目标对象时,会跳过 null 和 undefined ,不报错 Object.assign(1,undefined); // Number {1}...Object.assign({a: 1},null); // {a: 1} Object.assign(undefined,{a: 1}); // TypeError: Cannot convert

    36620

    前端一面必会手写面试题指南

    初始值, 或者计算结束后的返回值。 currentValue: 必需。当前元素。 currentIndex: 可选。当前元素的索引; arr: 可选。...实现步骤:首先获取类型的原型然后获得对象的原型然后一直循环判断对象的原型是否等于类型的原型,直到对象原型为 null,因为原型链最终为 null具体实现:function myInstanceof(left...temp > 9 } return res.replace(/^0+/, '');}其主要的思路如下:首先用字符串的方式来保存大数,这样数字在数学表示上就不会发生变化初始化res,temp来保存中间的计算结果...所以可能要仅为,对10进行取余操作,将结果保存在当前位判断当前位是否大于9,也就是是否会进位,若是则将temp赋值为true,因为在加法运算中,true会自动隐式转化为1,以便于下一次相加重复上述操作,直至计算结束实现防抖函数...) { throw new TypeError('this is null or not defined'); } if (typeof callback !

    68740
    领券