当前位置: 首页 > 面试题库 >

JavaScript代码技巧:foo.x的值是什么

步博艺
2023-03-14
问题内容

我在GitHub前端面试问题集中发现了这个问题:

var foo = {n: 1};
var bar = foo;
foo.x = foo = {n: 2};

问题:foo.x的值是什么?

答案是undefined

我已经进行了一些研究,并且我理解这个问题(如果我错了,请纠正我):

  • var foo = {n: 1};声明一个foo属性n等于1 的对象。
  • var bar = foo;声明一个对象bar,该对象引用与相同的对象foo
  • foo.x = foo = {n: 2}; 我相信等于 foo.x = (foo = {n: 2});
  • 然后我foo.x等于undefined。但是,的值bar.xobject {n:2}

如果barfoo是指同一个对象,为什么bar.x得到的值,而foo.xundefined?真正发生了foo.x = foo = {n: 2};什么?


问题答案:

foo.x = foo = {n: 2};

判定foo.x是指一种属性x的的{n: 1}对象,受让人{n: 2}foo,和受让人的新值foo- {n: 2}-为属性x的的{n: 1}对象。

重要的是,foofoo.x指的是之前确定foo的变化。

参见ES5规范的11.13.1节

  1. lref 为评估 LeftHandSideExpression 的结果。

  2. rref 为评估 AssignmentExpression 的结果。

赋值运算符从右到左关联,因此您得到:

foo.x = (foo = {n: 2})

首先评估左侧,然后评估右侧。



 类似资料:
  • 本文向大家介绍JavaScript实用代码小技巧,包括了JavaScript实用代码小技巧的使用技巧和注意事项,需要的朋友参考一下 在上次的 “Chrome DevTools 你可能不知道的小技巧” 文中,得到很多开发朋友的反馈确实不知道这些小技巧。今天,我们来聊一聊在 EcmaScript5/6+ 中的一些小技巧,欢迎评论区讨论下更多技巧。 JSON.stringify 我们平时经常会用到JSO

  • 问题内容: 我最近在proggit上遇到了对它的引用,并且(到目前为止)没有对其进行解释。 我怀疑这可能是吧,但我不知道。 问题答案: 如果设置为共享库的路径,则该文件将 在 任何其他库(包括C运行时) 之前 加载。因此,要运行您的特殊实现,请执行以下操作:

  • 本文向大家介绍JavaScript代码简化技巧实例解析,包括了JavaScript代码简化技巧实例解析的使用技巧和注意事项,需要的朋友参考一下 函数式编程可以使您的代码更简单。简单意味着代码易于阅读和理解,可测试和可维护。 在本文中,我描述了一些函数式编程(FP)技巧,您可以使用它们来简化代码,从而使代码更好。 摆脱临时变量和不变性原则 函数式编程倾向于不变性,这种不变性原则意味着在初始化变量之后

  • 本文向大家介绍Python使用pdb调试代码的技巧,包括了Python使用pdb调试代码的技巧的使用技巧和注意事项,需要的朋友参考一下 什么是pdb 不知道大家在用Python写代码出现报错时是怎样调试的,从报错提示定位回去一步一步check每一行?如果没有IDE或者命令行写代码时又该怎样快速调试?这时如果使用pdb进行调试将会异常方便。 Pdb就是Python debugger,是python自

  • 本文向大家介绍js 奇葩技巧之隐藏代码,包括了js 奇葩技巧之隐藏代码的使用技巧和注意事项,需要的朋友参考一下 昨天在群看到有人发了个文章叫《“短”化你的代码》,思路非常不错,采用unicode的零宽字符来实现字符隐藏,虽然有字符,可是你却看不见它。 这篇文章详细的介绍了这种方法的实现原理,最后还给出了一个生成工具。 当然,作者算了留了一个小小的练习给我们,因为他只用了两个字符,导致转换后的数据是

  • 本文向大家介绍JavaScript小技巧整理,包括了JavaScript小技巧整理的使用技巧和注意事项,需要的朋友参考一下 本文整理总结了JavaScript的小技巧。分享给大家供大家参考,具体如下: 1.组织默认事件 阻止默认事件,h5默认的input type='date'在某些浏览器和android设备上没有效果,这时要调用h5+的时间选择器,但是要组织input默认的click事件,代码如