文档章节

一个js面试题的分析

佣兵0926
 佣兵0926
发布于 2015/12/07 00:34
字数 550
阅读 681
收藏 7

网上看到“叶小钗”的一篇面试文章,里面谈到了一个js的面试题,自己做着试了下,全错!于是根据结果,反推了下原因。

题目:

var a = {n: 1};var b = a;
a.x = a = {n: 2}
console.log(a.x);
console.log(b.x)

这里面至少考了2个点:

1、js的引用类型数据

2、运算符优先级

对于一个老手来说,这里的坑主要在第二条,运算符优先级。

a.x = a = {n: 2}

2个等号,优先级相同,就先来后到,从左到右,等效于

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

为什么不能等效于

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

个人这么分析

js在执行赋值语句时,

如果等号右边是单个变量或者常量,直接执行赋值语句

如果是表达式,就看运算符优先级,如果优先级高于赋值语句,比如加法、减法等,就等高优先级运算之后,将结果赋值

如果又是一个赋值语句,那么优先级并不比自己高,就不能让它先计算,而是自己先往右继续寻找,直到找到一个独立的常量或者变量。

在这个例子中

a.x = a = {n: 2}

js引擎,不会把a直接赋值给a.x,因为a不是独立的,它从属于另外一个赋值语句,且是它的主体

a = {n: 2}

这个赋值语句,计算优先级和自己相同,先来后到,那么这个赋值语句就不能执行,自己还是继续往右找:a不能赋值,=是运算符,更不可能,继续往右,就是

{n: 2}

它是一个正真独立的常量,所以第一个等号就赋值成它,也就是

a.x={n:2};

的出处,执行完第一个赋值语句,再执行第二个

a = {n: 2}

第二个比较直接就没什么好说的了

所以,源代码中

a.x = a = {n: 2}

改成

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

运算结果也还是不变

原文:http://www.cnblogs.com/yexiaochai/p/4366051.html


© 著作权归作者所有

共有 人打赏支持
佣兵0926
粉丝 4
博文 56
码字总数 28941
作品 0
广州
太原面经分享:如何用js实现返回斐波那契数列的第n个值的函数

面试攒经验,let's go! 值此高考来临之际,闲不住的我又双叒叕出发去面试攒经验了,去了公司交待一番流程后,面试官甩给了我一张A4纸,上面写着一道js算法笔试题(一开始我并不知道这是在考...

闰土大叔
06/07
0
0
阿里巴巴Web前端开发面试题赋答案

最近发现阿里巴巴的Web前端开发面试题,共分三部分:CSS部分,JavaScript部分,紧急处理部分,分享给大家做个参考~ 第一部分:用CSS实现布局 让我们一起来做一个页面 首先,我们需要一个布局...

Qianduaner
2013/09/06
0
0
由一道关于变量作用域的面试题,来加深对var和let的理解

最近,有一道JavaScript面试题挺流行的,很多朋友去面试的时候都遇到了。这道题目大致是这个样子的: 以下这段代码执行后,结果为什么不是依次输出0到9?如果要让它实现这样的输出,你会怎么...

一斤代码
07/23
0
0
前端面试&笔试&错题指南(三)

JavaScript排坑指南(三) JavaScript总是给人以惊喜,学习不止,进步不断,今天继续补充JS容易搞错的几道笔试/面试题,为了秋招继续努力,欢迎一起为秋招努力的小伙伴共勉 ------------------...

Vincent Ko
08/12
0
0
5个典型的JavaScript面试题(上)

本文由伯乐在线 -XfLoops 翻译,黄利民 校稿。未经许可,禁止转载! 英文出处: Aurelio De Rosa。欢迎加入 翻译组。 IT 行业对JavaScript开发者有着很大的需求。如果你具备这种角色所需的知...

伯乐在线
2014/12/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

创建第一个react项目

sudo npm i -g create-react-app@1.5.2 create-react-app react-app cd react-apprm -rf package-lock.jsonrm -rf node_modules #主要是为了避免报错npm installnpm start......

lilugirl
今天
1
0
在浏览器中进行深度学习:TensorFlow.js (八)生成对抗网络 (GAN)

Generative Adversarial Network 是深度学习中非常有趣的一种方法。GAN最早源自Ian Goodfellow的这篇论文。LeCun对GAN给出了极高的评价: “There are many interesting recent development...

naughty
今天
0
0
搬瓦工镜像站bwh1.net被DNS污染,国内打不开搬瓦工官网

今天下午(2018年10月17日),继搬瓦工主域名bandwagonhost.com被污染后,这个国内的镜像地址bwh1.net也被墙了。那么目前应该怎么访问搬瓦工官网呢? 消息来源:搬瓦工优惠网->搬瓦工镜像站b...

flyzy2005
今天
2
0
SpringBoot自动配置

本篇介绍下,如何通过springboot的自动配置,将公司项目内的依赖jar,不需要扫描路径,依赖jar的情况下,就能将jar内配置了@configuration注解的类,创建到IOC里面 介绍下开发环境 JDK版本1.8 spr...

贺小五
今天
3
0
命令行新建Maven多项目

参考地址 # DgroupId 可以理解为包名# DartifactId 可以理解为项目名mvn archetype:generate -DgroupId=cn.modfun -DartifactId=scaffold -DarchetypeArtifactId=maven-archetype-quickst......

阿白
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部