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

检查Javascript嵌套obj值是否存在未知密钥

可以通过以下方式实现:

  1. 首先,我们需要使用递归函数来遍历嵌套的对象。递归函数是一种自我调用的函数,可以在对象的每个级别上进行迭代。
  2. 在递归函数中,我们可以使用typeof操作符来检查对象的类型。如果对象是一个嵌套的对象,则我们可以再次调用递归函数来继续遍历。
  3. 在遍历对象的过程中,我们可以使用Object.keys()方法获取对象的所有键,并使用Array.prototype.forEach()方法遍历这些键。
  4. 对于每个键,我们可以使用hasOwnProperty()方法来检查对象是否具有该键。如果对象具有该键,则我们可以继续递归遍历该键对应的值。
  5. 如果对象不存在未知密钥,则我们可以返回true。否则,我们可以返回false

下面是一个示例代码:

代码语言:txt
复制
function checkNestedObj(obj) {
  if (typeof obj !== 'object' || obj === null) {
    return false;
  }

  let hasUnknownKey = false;

  Object.keys(obj).forEach(key => {
    if (!obj.hasOwnProperty(key)) {
      hasUnknownKey = true;
    } else if (typeof obj[key] === 'object') {
      hasUnknownKey = checkNestedObj(obj[key]);
    }
  });

  return hasUnknownKey;
}

// 示例用法
const obj = {
  key1: 'value1',
  key2: {
    nestedKey1: 'nestedValue1',
    nestedKey2: 'nestedValue2'
  },
  key3: 'value3'
};

console.log(checkNestedObj(obj)); // 输出 false

在这个示例中,我们定义了一个checkNestedObj()函数来检查嵌套对象obj中是否存在未知密钥。我们首先检查obj是否是一个对象,如果不是,则直接返回false。然后,我们遍历obj的所有键,并检查每个键是否是obj的自有属性。如果存在未知密钥,则将hasUnknownKey设置为true。如果键对应的值是一个嵌套对象,则我们递归调用checkNestedObj()函数来继续检查该嵌套对象。最后,我们返回hasUnknownKey的值。

这种方法可以帮助我们检查嵌套对象中是否存在未知密钥,并根据需要进行相应的处理。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

JavaScript | 再也不用写烦人的非空判断了,JavaScript可选链操作符?.----真香!

)允许读取位于连接对象链深处的属性的,而不必明确验证链中的每个引用是否有效。?. 操作符的功能类似于 ....在探索一个对象的内容时,如果不能确定哪些属性必定存在,可选链操作符也是很有帮助的。 语法: obj?.prop obj?.[expr] arr?.[index] func?....(args) 举例: 通过链接的对象的引用或函数可能是undefined或者null时,可选链操作符提供了一种方法来简化对被链接对象的的访问。 比如:一个存在嵌套结构的对象obj。...不使用可选链操作符的话,查找obj的一个深度嵌套的子属性时,需要验证之间的引用,例如: let name = obj.person && obj.person.name; 使用可选链操作符的写法如下:...操作符,JavaScript 会在尝试访问 obj.person.name 之前,先隐式地检查并确定 obj.person 既不是 null 也不是 undefined。

75110

可选链运算符(?.)

背景: 在 ES2020 之前,如果要访问 JavaScript 中对象的嵌套属性,则必须在每个级别检查是否为 null 或 undefined,否则最终将会抛出 TypeError。...,现在我们就可以内联进行这些检查了。 官方定义: 可选链运算符(?.)允许读取位于连接对象链深处的属性的,而不必明确验证链中的每个引用是否有效。?. 运算符的功能类似于 ....与函数调用一起使用时,如果给定的函数不存在,则返回 undefined。 mdn 语法: obj.val?.prop obj.val?.[expr] obj.func?....运算符,JavaScript 会在尝试访问 obj.first.second 之前,先隐式地检查并确定 obj.first 既不是 null 也不是 undefined。..., onError) { try { // ... do something with the data } catch (err) { if (onError) { // 校验 onError 是否真的存在

1K30

ES2020 系列:可选链 ?. 为啥出现,我们能用它来干啥?

是一种访问嵌套对象属性的安全的方式。即使中间的属性不存在,也不会出现错误。 “不存在的属性”的问题 如果你才刚开始读此教程并学习 JavaScript,那可能还没接触到这个问题,但它却相当常见。...可能最先想到的方案是在访问该的属性之前,使用 if 或条件运算符 ? 对该进行检查,像这样: let user = {}; alert(user.address ?...语法有三种形式: obj?.prop —— 如果 obj 存在则返回 obj.prop,否则返回 undefined。 obj?....[prop] —— 如果 obj 存在则返回 obj[prop],否则返回 undefined。 obj.method?....检查左边部分是否为 null/undefined,如果不是则继续运算。 ?. 链使我们能够安全地访问嵌套属性。 但是,我们应该谨慎地使用 ?.,仅在当左边部分不存在也没问题的情况下使用为宜。

92340

ES2020 骚操作:可选链 ?.

是一种访问嵌套对象属性的安全的方式。即使中间的属性不存在,也不会出现错误。 “不存在的属性”的问题 如果你才刚开始读此教程并学习 JavaScript,那可能还没接触到这个问题,但它却相当常见。...可能最先想到的方案是在访问该的属性之前,使用 if 或条件运算符 ? 对该进行检查,像这样: let user = {}; alert(user.address ?...语法有三种形式: obj?.prop —— 如果 obj 存在则返回 obj.prop,否则返回 undefined。 obj?....[prop] —— 如果 obj 存在则返回 obj[prop],否则返回 undefined。 obj.method?....检查左边部分是否为 null/undefined,如果不是则继续运算。 ?. 链使我们能够安全地访问嵌套属性。 但是,我们应该谨慎地使用 ?.,仅在当左边部分不存在也没问题的情况下使用为宜。

73810

JavaScript权威指南 - 函数

也就是说,如果嵌套函数作为方法调用,其this指向为调用它的对象。如果嵌套函数作为函数调用,其this不是全局对象就是undefined。下面通过一段代码来具体说明。...函数的实参和形参 JavaScript中的函数定义不需要指定函数形参的类型,调用函数时也不检查传入形参的个数。...JS可以自动转换,但是还存在其他情况:比如,一个方法期望它第一个实参为数组,传入一个非数组的就可能引发问题,这时就应当在函数体中添加实参类型检查逻辑。...Error("Expected "+ expected+"args;got "+ actual); } } function f(x,y,z) { check(arguments); //检查实参和形参个数是否一致...function memorize(f) { //将存在闭包中。

2.9K30

分享近百道JavaScript 基础面试题,帮助你巩固JavaScript 基础知识

null 表示有意不存在任何对象,而 undefined 表示不存在或未初始化的变量。 4. 如何在 JavaScript 中声明变量?...JavaScript 中的浅拷贝和深拷贝有什么区别? 对象或数组的浅拷贝创建对原始对象的新引用,而深拷贝创建具有所有嵌套属性和的完全独立的对象副本。 53....JavaScript 中的 forEach() 方法的用途是什么? forEach() 方法为数组中的每个元素执行一次提供的函数。 73. JavaScript 中如何检查数组中是否存在某个元素?...可以使用 includes() 方法检查数组中是否存在元素。 74. JavaScript 中的 slice() 和 splice() 方法有什么区别?...在 JavaScript 中如何检查一个是否为数字? 可以使用 typeof 运算符检查是否属于“数字”类型,或使用 isNaN() 函数检查是否为有效数字。

18010

一天一个javascript小技巧【可选链操作符】

) 允许读取位于连接对象链深处的属性的,而不必明确验证链中的每个引用是否有效。?. 操作符的功能类似于 ....(args) 描述 通过连接的对象的引用或函数可能是 undefined 或 null 时,可选链操作符提供了一种方法来简化被连接对象的访问。 比如,思考一个存在嵌套结构的对象 obj。...不使用可选链的话,查找一个深度嵌套的子属性时,需要验证之间的引用,例如: let nestedProp = obj.first && obj.first.second; Copy to Clipboard...操作符取代.操作符,JavaScript 会在尝试访问obj.first.second之前,先隐式地检查并确定obj.first既不是null也不是undefined。...try { // ... do something with the data } catch (err) { if (onError) { // 校验 onError 是否真的存在

63520

谈谈前端面试经常遇到的一些题目

箭头函数不同于传统JavaScript中的函数,箭头函数并没有属于⾃⼰的this,它所谓的this是捕获其所在上下⽂的 this ,作为⾃⼰的 this ,并且由于没有属于⾃⼰的this,所以是不会被...问题三: 这个传输密钥的过程,又如何保证加密?如果被中间人拦截,密钥也会被获取, 那么你会说对密钥再进行加密,那又怎么保存对密钥加密的过程,是加密的过程?...浏览器根据这个属性,计算主轴是否有多余空间。它的默认为auto,即项目的本来大小。flex属性是flex-grow,flex-shrink和flex-basis的简写,默认为0 1 auto。...如何提取高度嵌套的对象里的指定属性?...这个算法分为三步:首先检查 From 空间的存活对象,如果对象存活则判断对象是否满足晋升到老生代的条件,如果满足条件则晋升到老生代。如果不满足条件则移动 To 空间。如果对象不存活,则释放对象的空间。

66530

ES2015新语法详解——生成器(Generator)

:)/ 在代码风格检查工具ESLint中有一个名为no-new的可选特性,即相比使用new,更倾向于使用直接调用构造函数来创建实例。...这就意味着没办法简单使用instanceof来判定一个对象是否是生成器函数或生成器实例。如果你确实希望检测一个未知的对象是否为一个生成器函数或者生成器实例,也可以通过一些取巧的办法。...在著名的JavaScript工具类库LoDash的类型检测中,正式使用了这种方法(包括但不限于)来对未知对象进行类型检查,我们也可以试着使用这种手段。...function isGenerator(obj) { return obj.toString ?...但是在实际开发中,我们同样会遇到一个生成器嵌套在另一个生成器内的情况,就比如数学中的分段函数或嵌套的数组公式等。 假设有如下所示的一个分段函数,我们需要对其进行积分计算。 ?

77050

10个写TypeScript代码的坏习惯

: number } 应该怎样 明确哪些组合存在,哪些不存在。...对非布尔类型的进行布尔检查 这种习惯看起来是什么样的 通过直接将传给 if 语句来检查是否定义了。...就像是进入 JavaScript 世界的入门仪式。它看起来简短而简洁,如果你对它已经非常习惯了,就会知道它的含义。这是将任意转换为布尔的便捷方式。...在对“非布尔类型的”进行布尔检查时 countOfNewMessages 为 0 的问题在使用 !! 时仍然会存在。 10. != null 这种习惯看起来是什么样的 棒棒运算符的小弟 !...一种常见模式是将 null 定义为不存在的事物,将 undefined 定义为未知的事物,例如 user.firstName === null 可能意味着用户实际上没有名字,而 user.firstName

65520

检查JavaScript文件_TypeScript笔记18

写在前面 TypeScript 的类型检查不仅限于.ts,还支持.js 但为了确保文件内容只含有标准的 JavaScript 代码,.js文件按照 ES 语法规范来检查,因而不允许出现 TypeScript...等严格校验标记在.js里也不那么可靠 一.开启检查 --allowJs选项允许编译 JavaScript 文件,但默认不会对这些文件做类型检查。...定义在构造函数中的属性都认为是一定存在的,其它地方(如成员方法)出现的都当作可选的 类声明中未出现的属性都是未定义的,访问就报错 构造函数等价于类 另外,在 ES6 之前,JavaScript 里用构造函数代替类...不定参数推断 .js里会根据arguments的使用情况来推断是否存在不定参数,例如: // .js function sum() { var total = 0 for (var i = 0...、都支持嵌套、并且三者能够结合使用)。

2.4K50

《现代Javascript高级教程》JavaScript深拷贝与浅拷贝

现代JavaScript高级小册 深入浅出Dart 现代TypeScript高级小册 JavaScript深拷贝与浅拷贝 引言 在JavaScript中,对象的拷贝是一项常见的操作。...对于基本类型,直接返回其即可。对于特殊类型,可以选择直接引用原始对象,而不进行复制。 function deepClone(obj) { // 处理基本类型 if (typeof obj !...1.2 处理循环引用 循环引用是指对象属性之间存在相互引用的情况,导致递归复制陷入无限循环。...在每次递归调用时,我们首先检查 map 中是否存在当前对象的引用,如果存在则直接返回对应的副本。这样,我们可以避免陷入无限循环。...它只会复制源对象的属性的引用,而不是属性的

44320

面试前必备的 JavaScript 基础知识梳理总结

比较好的方法是单独检查变量是否等于 null/undefined。 6. 空合并运算符 '??' 空合并运算符 ?? 提供了一种从列表中选择第一个“已定义的”的简便方式。...其他操作: 删除属性:delete obj.prop。 检查是否存在给定键的属性:"key" in obj。 遍历对象:for(let key in obj) 循环。...检查左边部分是否为 null/undefined,如果不是则继续运算。 ?. 链使我们能够安全地访问嵌套属性。 但是,我们应该谨慎地使用 ?.,仅在当左边部分不存在也没问题的情况下使用为宜。...如果我们想要读取 obj 的一个属性或者调用一个方法,并且它不存在,那么 JavaScript 就会尝试在原型中查找它。...简略的对比: elem.hasAttribute(name) — 检查是否存在这个特性。操作特性的方法: elem.getAttribute(name) — 获取这个特性

79620

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券