当前位置: 首页 > 知识库问答 >
问题:

javascript - 如果用js实现a变量为undefined,但是a.b.c的值为1?

段曦
2023-09-15

有没有什么办法可以做到如下
console.log(a); // undefined
console.log(a.b); // undefined
console.log(a.b.c); // 1

共有6个答案

华展鹏
2023-09-15
const a = {    b: {        c: {            v: 1        },        v: undefined    },    v: undefined}const bp = console.log;console.log = v => bp(v.v)console.log(a); // undefinedconsole.log(a.b); // undefinedconsole.log(a.b.c); // 1
韶英达
2023-09-15

如果undefined是指"undefined", 可以的, 一楼的方法就行了, 但是如果是指数据类型undefined, 不行的, 这违反JS语法了:
image.png

屠昌胤
2023-09-15

做不了,没办法知道调用者的后续取值

有权
2023-09-15
let i = 0let a1 = {}let b2 = {}Object.defineProperty(window, 'a', {  get (val) {    i++    if (i === 1) {      Object.defineProperty(a1, 'b', {        get () {          if (i === 2) {            Object.defineProperty(b2, 'c', {              get () {                return 1              }            })          }          return i === 2 ? undefined : b2        }      })    }    return i === 1 ? undefined : a1  },  set () { }})console.log(a)console.log(a.b)console.log(a.b.c)

纯属应付

施俊远
2023-09-15

可能不符合题意,但是确实是 undefined

const a = "undefined";Object.defineProperties(String.prototype, {  b: { value: "undefined" },  c: { value: 1 },});console.log(a);     // undefinedconsole.log(a.b);   // undefinedconsole.log(a.b.c); // 1

补充,undefined 不是对象,而 Object.definePropertyProxy 都只能用于对象,所以如果 a 真是 undefined 是不可能实现的;

如果自定义一个对象,让 console.log 输出这个对象的时候打印 undefined,不同浏览器的 console.log 实现不同,而且不一定会调用 toString() 或者 valueOf()

Console API in FF calls toString() on the argument only if the argument type is not one of { undefined, null, object, set, map } types. It doesn't always call toString() or valueOf() methods.
朱天逸
2023-09-15

根据您的描述,如果a变量为undefined,但是a.b.c的值是1,那么您可以使用以下代码实现:

console.log(a); // undefinedconsole.log(a.b); // undefinedconsole.log(a.b.c); // 1

在这个代码中,a是一个变量,但它是未定义的。在第一个console.log()中,我们将未定义的变量打印到控制台,所以它会返回undefined。在第二个console.log()中,我们尝试打印a.b,但由于a是未定义的,所以它也会返回undefined。最后,在第三个console.log()中,我们尝试打印a.b.c,由于a.b是未定义的,所以它也会返回undefined。但是,由于a.b.c的值是1,所以这个值会被打印到控制台。

 类似资料:
  • 问题描述 如下图所示,我分别打印了ObjectFood和ObjectFood[1001] 但是输出结果如下图所示 后续尝试了 这两种方法均是undefined,求各位帮忙解惑

  • 问题内容: 我可以用吗: 代替 后者似乎太冗长。有区别吗? 问题答案: 该声明 将调用(请参阅特殊方法名称文档)并使用该函数的返回值。总结如下: 要求执行真值测试和内置操作;应该返回或,或者它们的整数等效值或。如果未定义此方法,则调用该方法(如果已定义),并且如果其结果为非零,则将该对象视为true。如果一个类既未定义,也未定义,则其所有实例均被视为true。 另一方面, 仅 将参考与进行比较以查

  • 本文向大家介绍JS实现不用中间变量temp 实现两个变量值得交换方法,包括了JS实现不用中间变量temp 实现两个变量值得交换方法的使用技巧和注意事项,需要的朋友参考一下 1.使用加减法; 2.使用乘除法(乘除法更像是加减法向乘除运算的映射) 注意:该方法可以交换整型和浮点型数值的变量,但在处理浮点型的时候有可能出现精度的损失  而且乘除时b不能为0; 3.使用数组的灵活性 总结 以上所述是小编给

  • 如果未在 Go 中设置环境变量,如何分配默认值? 在Python中,我可以做其中是默认值,如果env var未设置。 我尝试了基于 os 的 if 语句 是空的,但由于 if 语句中的变量赋值范围,这似乎不起作用。而且我正在检查多个 env var,所以我无法在 if 语句中对这些信息采取行动。

  • 问题内容: 我读了这个问题不可变对象,并留下了关于不可变对象,并最终场一个问题: 为什么我们需要不可变类中的实例变量为最终变量? 例如,考虑以下不可变的类: 如果在上面的代码中没有set方法,而实例变量仅在构造函数中设置,为什么要求将实例变量声明为final? 问题答案: 有没有 要求 这样做的变量。但是,当您确实明确打算永远不更改变量时,通常这样做是一种好习惯,因为这不仅可以使变量避免错别字或其