Java程序员面试之JavaScript细节题

Java程序员面试之JavaScript细节题

下面JavaScript代码输出结果是?

Java程序员面试之JavaScript细节题

则y个z的值分别是多少?

A、 undefined undefined

B、 4 4

C、1 4

D、1 1


解析:

本题迷惑性比较大,看题要仔细。

function add(n)函数没有返回值,所以y和z都是undefined。

可能有些人会问为什么没写return语句返回的就是undefined呢?

我们查看js的规范:

Java程序员面试之JavaScript细节题

根据规范来看,如果没有return语句(函数体内没有代码也算),返回的是undefined。

有很多知识,我们不是很懂的建议多去查规范而不仅仅是使用手册。

Java程序员面试之JavaScript细节题

拓展

如果这题 add函数里,加上返回值呢?

Java程序员面试之JavaScript细节题

这里有两个add函数,后面的覆盖前面的。

y和z的值都会是4.

如果这题改成如下代码呢?

Java程序员面试之JavaScript细节题

这时s的值为NaN

因为 y 和z 都是undefined

那为啥 undefined相加是NaN呢?

http://es5.github.io/#x11.4.6

Java程序员面试之JavaScript细节题

我们可以看到 加法操作主要针对 字符串和数字类型。

第8条,操作执行 ToNumber函数

http://es5.github.io/#x9.3

Java程序员面试之JavaScript细节题

看到这里就一目了然了,Undefined作为参数执行ToNumebr函数时,结果是NaN。

而且我们顺便可以看到,参数为Null和Boolean类型的情况。

在这里我们会观察到平时没有注意到的很多细节。

参考资料

JavaScript 参考文档

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference

Es5规范文档 http://es5.github.io/

欢迎加入Java学习群:116291581 一起探讨交流。

群里有已经在公司工作的大牛,也有初学Java的新手。

也有很多在校大学生、研究生。

Java程序员面试之JavaScript细节题

  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin
avatar

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: