javascript - if (function f(){})中function f(){}为何会是true?
巴扎黑
巴扎黑 2017-04-11 10:35:43
[JavaScript讨论组]

刷简书碰到一篇讲面试题的文章http://www.jianshu.com/p/55e54345829a

var x = 1;
if (function f() {}) {
    x += typeof f;
}
x;
A. 1
B. "1function"
C. "1undefined"
D. NaN

我选的A,判断是function f(){}没有明显的return,那么函数默认返回undefined,if语句根本不会执行。
答案以及浏览器执行结果是C. "1undefined",if语句执行了。
function f(){}为何会转换成true?烦请哪位能详细解释下或者给个说明的文章。

巴扎黑
巴扎黑

全部回复(3)
黄舟

因为function f(){}是个对象 , if的括号里面放的东西都会转换成true或者false .
上面如果写成 :

var x = 1;
if (function f() {}==true) {
    x += typeof f;
}
x;

x就等于1了 , 因为function f(){}不等于true嘛 , 但是只有function f()的话 , if会把它强制转化成true 或者 false :

!!(function f(){})

这样得到的就是一个true了

伊谢尔伦

function f(){}在定义函数!又不是调用函数!所以跟返回值有什么关系?

具体说它是一个函数表达式,函数表达式的值当然是函数。函数是什么?函数是一个对象。把任何对象转为布尔类型时都是true

第二个知识点是考察命名的函数表达式function f(){}就是一个命名的函数表达式。它的名字f只在函数体内部可见,所以外部取不到,当然是undefined

这些都是ES规范里面的,没事儿的时候多翻翻看。

迷茫

if条件里面只是函数定义,而不是函数运行。函数本身是一个对象,判断为true

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号