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

如何在JavaScript中访问暂未存在的嵌套对象

JavaScript 是个很神奇的东西。但是 JavaScript中的一些东西确实很奇怪,让人摸不着头脑。...其中之一就是当你试图访问嵌套对象时,会遇到这个错误 Cannot read property 'foo' of undefined 在大多数情况下,处理嵌套的对象,通常我们需要安全地访问最内层嵌套的值。...user.personalInfo.name : null; 如果你的嵌套结构很简单,这是可以的,但是如果数据嵌套五或六层深,那么你的代码就会看起很混乱: let city; if ( data...Oliver Steele的嵌套对象访问模式 这是我个人的最爱,因为它使代码看起来干净简单。 我从 stackoverflow 中选择了这种风格,一旦你理解它是如何工作的,它就非常吸引人了。...做法是检查用户是否存在,如果不存在,就创建一个空对象,这样,下一个级别的键将始终从存在的对象访问。 不幸的是,你不能使用此技巧访问嵌套数组。

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

    JavaScript 中的对象

    对象 JavaScript 中的对象,Object,可以简单理解成“名称 - 值”对(而不是键值对:现在,ES 2015 的映射表(Map),比对象更接近键值对),不难联想 JavaScript 中的对象与下面这些概念类似...: Python 中的字典(Dictionary) Perl 和 Ruby 中的散列/哈希(Hash) C/C++ 中的散列表(Hash table) Java 中的散列映射表(HashMap) PHP...中的关联数组(Associative array) 这样的数据结构设计合理,能应付各类复杂需求,所以被各类编程语言广泛采用。...正因为 JavaScript 中的一切(除了核心类型,core object)都是对象,所以 JavaScript 程序必然与大量的散列表查找操作有着千丝万缕的联系,而散列表擅长的正是高速查找。...“名称”部分是一个 JavaScript 字符串,“值”部分可以是任何 JavaScript 的数据类型——包括对象。这使用户可以根据具体需求,创建出相当复杂的数据结构。

    2.4K20

    javascript中的内置对象和数据结构

    简介 基本上所有的程序员都使用过javascript,我们在web中使用javascript,我们在服务器端使用nodejs,js给大家的第一映像就是简单,但是可能并不是所有人都系统的了解过js中的内置对象和数据结构...Symbol Symbol是一个唯一的不可变的基础类型,一般用在对象的key中。...中的一种数据类型,几乎所有的对象都继承自Object,它存储的是key-value形式的数据,我们可以通过使用Ojbect()方法或者new Object()或者Object字面量的方式来创建Object...对于JS中的Map来说,通常需要维护两个数组,第一个数组中存储key,第二个数组中存储value。每次添加和删除item的时候,都需要同时操作两个数组。...这种实现有两个缺点,第一个缺点是每次查找的时候都需要遍历key的数组,然后找到对应的index,再通过index来从第二个数组中查找value。

    57311

    MongoDB数据的插入、查询、更新和删除

    在MongoDB中,我们可以使用CRUD(Create、Read、Update、Delete)操作来插入、查询、更新和删除数据。...数据插入:在MongoDB中,我们可以使用insertOne()或insertMany()方法来插入数据。insertOne()方法用于插入单个文档,而insertMany()方法用于插入多个文档。...如果要查询所有文档,可以使用一个空的查询对象作为参数,如下所示:db.collection.find({})更新数据:在MongoDB中,我们可以使用updateOne()或updateMany()方法来更新数据...“John”的文档的“age”字段,将其值从30更改为40。...删除数据:在MongoDB中,我们可以使用deleteOne()或deleteMany()方法来删除数据。deleteOne()方法用于删除单个文档,而deleteMany()方法用于删除多个文档。

    2.5K10

    JavaScript 中的代理对象

    JavaScript 支持 setter 和 getter 已经很长时间了。他们用带有 set 和 get 关键字的简单语法来拦截对象的属性访问和值的修改操作。...它们不能与相同键(即“常规”属性)的数据入口一起使用。...因此,ECMAScript 6(ES6)引入了代理对象(Proxy object)。 代理(Proxy) 代理是内置的 JS 对象,可用于拦截和更改与对象相关的不同操作的行为。...除此之外,它们不仅限于 set() 和 get(),还包括一些有趣的操作,你可以在 MDN 文档(https://developer.mozilla.org/en-US/docs/Web/JavaScript...话虽如此,根据 Can I use…(https://caniuse.com/#feat=proxy) 的数据,总体的支持看上去不错,覆盖率约为 93%(不支持 IE 和 Safari 的版本)

    1.1K20

    javascript中的内置对象和数据结构

    简介 基本上所有的程序员都使用过javascript,我们在web中使用javascript,我们在服务器端使用nodejs,js给大家的第一映像就是简单,但是可能并不是所有人都系统的了解过js中的内置对象和数据结构...Symbol Symbol是一个唯一的不可变的基础类型,一般用在对象的key中。...js中的一种数据类型,几乎所有的对象都继承自Object,它存储的是key-value形式的数据,我们可以通过使用Ojbect()方法或者new Object()或者Object字面量的方式来创建Object...对于JS中的Map来说,通常需要维护两个数组,第一个数组中存储key,第二个数组中存储value。每次添加和删除item的时候,都需要同时操作两个数组。...这种实现有两个缺点,第一个缺点是每次查找的时候都需要遍历key的数组,然后找到对应的index,再通过index来从第二个数组中查找value。

    51521

    JavaScript Array(数组)对象中指定元素的删除

    大家好,又见面了,我是你们的朋友全栈君。 js在前台界面中举足轻重,在使用js删除数组时遇到一些问题(详见删除元素),参考很多大神的资料,现把常用的函数总结出来,以备不时之需。...,当点击子行会把子行的子行删除,这样我就需要获取子行的id的最后一个数字,再使用$(“id^=”id_1_”’+n+’”).remove();删除子行。。。...,delCount,item1,item2……itemN);//从start的位置开始向后删除delCount个元素,然后从start的位置开始插入一个或多个新元素 //4、删除元素 array.pop...;//从start的位置开始向后删除delCount个元素 //5、数组的合并&截取 array.concat(array1,array2);//array1和array2合并成一个数组...array.slice(start,end);//截取数组,从start开始包含start到end结束不包含end的元素 //6、数组的排序 array.reverse();//用于颠倒数组中元素的顺序

    2.9K10

    理解JavaScript中的window对象

    前言 每个JavaScript环境都有一个全局对象(global object)。在全局范围内创建的任何变量实际上都是这个对象的属性,而任何函数都是它的方法。...在浏览器环境中,全局对象是window对象,它代表了包含网页的浏览器窗口。...全局变量是全局对象的属性。在浏览器环境中,全局对象就是window对象。...比如说,window.confirm()对话框可以被用来当做最终确认,检查用户是否想要删除资源。这将阻止程序继续进行并阻止删除资源,直到用户来决定如何处理。...userAgent已经从官方标准中废弃,但是它仍然在所有主流浏览器中得到很好的支持。 URL window.location是一个对象,该对象包含有关当前页面URL的信息。

    1.7K20

    JavaScript 中对象的深拷贝

    在JavaScript中,对对象进行拷贝的场景比较常见。但是简单的复制语句只能对对象进行浅拷贝,即复制的是一份引用,而不是它所引用的对象。...而更多的时候,我们希望对对象进行深拷贝,避免原始对象被无意修改。 对象的深拷贝与浅拷贝的区别如下: 浅拷贝:仅仅复制对象的引用,而不是对象本身; 深拷贝:把复制的对象所引用的全部对象都复制一遍。...但是 Object.assign() 进行的是浅拷贝,拷贝的是对象的属性的引用,而不是对象本身。 ? 二....深拷贝的实现 要实现深拷贝有很多办法,有最简单的 JSON.parse() 方法,也有常用的递归拷贝方法,和ES5中的 Object.create() 方法。...这种方法能正确处理的对象只有 Number, String, Boolean, Array, 扁平对象,即那些能够被 json 直接表示的数据结构。RegExp对象是无法通过这种方式深拷贝。

    1K20

    javascript中Math对象的用法

    Date 和 String 那样是对象的类,因此没有构造函数 Math(),像 Math.sin() 这样的函数只是函数,不是某个对象的方法。...SQRT2 返回 2 的平方根(约等于 1.414)。 Math对象的详细对象方法 方法 描述 abs(x) 返回数的绝对值。 acos(x) 返回数的反余弦值。...atan2(y,x) 返回从 x 轴到点 (x,y) 的角度(介于 -PI/2 与 PI/2 弧度之间)。 ceil(x) 对数进行上舍入。 cos(x) 返回数的余弦。...exp(x) 返回 e 的指数。 floor(x) 对数进行下舍入。 log(x) 返回数的自然对数(底为e)。 max(x,y) 返回 x 和 y 中的最高值。...min(x,y) 返回 x 和 y 中的最低值。 pow(x,y) 返回 x 的 y 次幂。 random() 返回 0 ~ 1 之间的随机数。 round(x) 把数四舍五入为最接近的整数。

    1K10
    领券