有没有什么办法可以做到如下
console.log(a); // undefined
console.log(a.b); // undefined
console.log(a.b.c); // 1
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
如果undefined
是指"undefined"
, 可以的, 一楼的方法就行了, 但是如果是指数据类型undefined
, 不行的, 这违反JS语法了:
做不了,没办法知道调用者的后续取值
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)
纯属应付
可能不符合题意,但是确实是 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.defineProperty
和 Proxy
都只能用于对象,所以如果 a
真是 undefined
是不可能实现的;
如果自定义一个对象,让 console.log
输出这个对象的时候打印 undefined
,不同浏览器的 console.log
实现不同,而且不一定会调用 toString()
或者 valueOf()
:
Console API in FF callstoString()
on the argument only if the argument type is not one of{ undefined, null, object, set, map }
types. It doesn't always calltoString()
orvalueOf()
methods.
根据您的描述,如果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? 问题答案: 有没有 要求 这样做的变量。但是,当您确实明确打算永远不更改变量时,通常这样做是一种好习惯,因为这不仅可以使变量避免错别字或其