首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么` `function test(){} + 1;`的输出是1?

这个问题涉及到JavaScript中的运算符优先级和类型转换的概念。

首先,JavaScript中的运算符优先级决定了表达式中各个运算符的执行顺序。在这个表达式中,+运算符的优先级比函数调用运算符()要低,因此先执行函数调用运算符。

其次,函数调用运算符()会执行函数test(),但是test()函数并没有返回值。在JavaScript中,如果一个函数没有明确的返回值,默认会返回undefined

最后,undefined和数字1进行相加运算时,JavaScript会进行类型转换。在这里,undefined会被转换为NaN(Not a Number),而NaN与任何数字相加的结果都是NaN

因此,最终的输出结果是NaN

关于JavaScript中的运算符优先级和类型转换的更详细解释,可以参考以下链接:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

JS基础测试: a();function a(){console.log(1)}function a(){..}输出是多少?​

1. 预处理会跳过执行语句,只处理声明语句,同样也是按从上到下按顺序进行的。包括变量和函数在内的所有声明都会在任何代码被执行前首先被处理。...注意1:对于声明并赋值的语句,例如 var a = 1,在预处理阶段会把这句话拆成两句: var a; a = 1; 也就是说,赋值或其他逻辑运算是在执行阶段进行的,在预处理阶段会被忽略。...注意2: (1)函数声明的提升优先于变量声明的提升; (2)重复的var声明会被忽略掉,但是重复的function声明会覆盖掉前面的声明。...2.在预处理阶段,声明的变量的初始值是undefined, 采用function声明的函数的初始内容就是函数体的内容。 3....完成预处理之后,JavaScript代码会从上到下按顺序执行逻辑操作和函数的调用。 参考代码: ? 答案: C. 2

3.2K20

代码里-3>>1是-2但3>>1是1,-32却又是-1,为什么?

之前群里有个同学向大家提出了类似这样的问题。随后这位同学公布了答案:右移运算是向下取整,除法是向零取整。这句话对以上现象做了很好的总结,可是本质原因是什么呢? 我一直以为-3>>1的结果是-1。...,即0x3按位取反之后0xfffffffc再加一,即为0xfffffffd 为什么会有这样的“奇怪”的补码形式呢?...有符号数除法一开始的处理: //此处被除数是r0,除数是r1 : cmp r1, #0 //判断r1和0的关系,并更新cpsr寄存器 beq.w 1098a test+0x27c> //如果除数等于0,那么跳转 test>: eor.w ip, r0, r1 //将除数和被除数进行异或并将结果存储到...所以-3/2的时候,会先计算3/2,得到1之后再赋值成-1 还记得那个神奇的数字0x80000000(-2147483648)吗,0x80000000乘以-1依然是0x80000000如果是这个数字除以

1.1K20
  • -7 % 2Python3输出为啥是1?

    二、实现过程 这里【巭孬嫑勥烎】给了一个解释,如下图所示: 在Python中“/”表示浮点数除法,返回浮点结果,也就是结果为浮点数,而“//”在Python中表示整数除法,返回不大于结果的一个最大的整数...如果懂了的话,下面【瑜亮老师】给出的两道题,肯定可以回答出来了,如下所示: 在不看答案的情况,你能做出来嘛?试试看~ 三、总结 大家好,我是皮皮。...这篇文章主要盘点了一个Python运算的基础问题,文中针对该问题,给出了具体的解析和代码实现,帮助粉丝顺利解决了问题。...往期精彩文章推荐: if a and b and c and d:这种代码有优雅的写法吗? Pycharm和Python到底啥关系?

    18930

    为什么计算机起始时间是1970年1月1日?

    在Java中,这个时间是1970, 00:00:00 GMT。 时间戳 一切要从Unix操作系统诞生开始说起。...为了让Unix时间戳表示时间这种方式用的尽可能久,最初就把Unix诞生的时间1971-1-1定义成"纪元时间"。...时间戳修改 除了开始时间是1971-1-1而不是1970-1-1外,最初的时间戳也不是每增加1秒时间戳就变动一次,而是每1/60秒都会改变一次时间戳。...另外,Unix是在1971年发明出来的,当时的计算机系统是32位,如果用32表示有整数,那么最大值是2147483647(2^31-1)。...1970-01-01 08:00:00的显示显然是受到了时区的影响,因为中国处于东八区,所以时间会比标准时间早8小时,而标准时间应该是1970-01-01 00:00:00。

    1.3K20

    1+1=2是如何运算的

    计算机,计算两个字才是关键,那么作为JVM也需要去进行计算,最简单的计算莫过于加减乘除,下面看一下加减乘除的具体指令有哪些,文章的结尾我们也会给出1+1=2的运算过程。...float和double窄化成整数类型,需要采取向零舍入(结果朝0的方向进行舍入)的规则,如果是10.9,转换成int以后就是10,如果浮点数转换后超过了int或者long的范围,那么会根据向零舍入后的数据的符号返回其最大或最小的正数...,这里特别强调是正数。...1+1=2 public class ClassTest { public int add(int a, int b) { return a + b; } } 我们看一反编译后的...着重看红框中的部分,红框中的含义就是将局部变量表中的第二个(a)和第三个元素(b)依次压入操作数栈,然后使用iadd弹出操作数栈顶两个元素进行加法运算,将结果再压入操作数栈顶,最后一个ireturn实际是将栈顶的元素进行返回

    99820

    漫话:为什么计算机起始时间是1970年1月1日?

    该构造函数接收用户指定一个毫秒数,如new Date(1000),表示获得一个距离"epoch"有1000毫秒的时间。在Java中,这个时间是1970, 00:00:00 GMT。 ? ? ?...为了让Unix时间戳表示时间这种方式用的尽可能久,最初就把Unix诞生的时间1971-1-1定义成"纪元时间"。 ? ? ? ?...时间戳修改 除了开始时间是1971-1-1而不是1970-1-1外,最初的时间戳也不是每增加1秒时间戳就变动一次,而是每1/60秒都会改变一次时间戳。...另外,Unix是在1971年发明出来的,当时的计算机系统是32位,如果用32表示有整数,那么最大值是2147483647(2^31-1)。...1970-01-01 08:00:00的显示显然是受到了时区《如何给女朋友解释为什么日本时间比中国快一个小时》的影响,因为中国处于东八区,所以时间会比标准时间早8小时,而标准时间应该是1970-01-01

    25.4K91

    Java的日期类的时间从为什么是从1970年1月1日开始?

    是说java起源于UNIX系统,而UNIX认为1970年1月1日0点是时间纪元。...----------------------------------------------------------------------------- 但这依然没很好的解释"为什么",出于好奇,继续...另外1年365天的总秒数是31536000秒, 2147483647/31536000 = 68.1年 也就是说32位能表示的最长时间是68年,而实际上到2038年01月19日03时14分07秒,便会到达最大时间...位来表示时间的最大间隔是68年,而最早出现的UNIX操作系统考虑到计算机产生的年代和应用的时限综合取了1970年1月1日作为UNIX TIME的纪元时间(开始时间),而java自然也遵循了这一约束。...8点而非0点,原因是存在系统时间和本地时间的问题,其实系统时间依然是0点,只不过我的电脑时区设置为东8区,故打印的结果是8点。

    4.7K20

    为什么样本方差分母是n-1?

    但是在利用样本方差去估计总体方差时候,样本方差的计算公式为: 而总体方差的的计算公式为: 为什么用样本方差估计总体方差时候,分母是 呢?...除数是 (样本数量-1),而不是样本数量 ,目的是代偿样本均值代替总体均值引起的变化。于是又产生两个问题: 为什么使用样本均值会低估总体方差?...除数为 为什么可以补偿样本均值代替总体均值引起的变化? 接下来我们一一证明。 1.为什么使用样本均值会低估总体方差? 1.1通俗解释版 假如我们有5个样本,样本均值为17.6,总体均值未知。...如果 的期望等于 ,则称 是 的无偏估计,即 。...除数为为什么可以补偿样本均值代替总体均值引起的变化? 同样,我们还是假设 我们通过求期望的方式,来看他是否是总体方差的无偏估计。

    2K10

    为什么这段代码输出的是”Hello World”

    Stackoverlfow.com上有一篇有趣的讨论帖: 在这篇帖子里提到了如下的程序: 明明是在程序里使用了java.util.Ramdom()函数产生随机数,为什么每次打出的结果都是Hello world...首先看一下这个程序的工作原理: 通过这句命令首先得到的六个数是: 8 5 12 12 15 0 然后,通过new Random(-147909649).nextInt(27)得到的6个数是: 23 15...关于这个程序的运行原理的解释,最置顶的一个回复如下: “如果java.util.Random是被一个具体的数字做为“随机数种子”而实例化(在本例中是-229985452和-147909649),那么该实例就会以这个随机数种子作为随机算法产生随机数的基础...这就是为什么每次运行该程序都会产生同样的结果的原理啦~ 当然,关于这个话题,高手林立的Stackoverflow上是不缺乏懂行的专家和见解的。...尤其是在复杂的计算环境下的高质量随机数的产生,需要牵涉到非常高深的计算科学和数学方面的理论研究。 在计算机随机数产生的理论研究上,美籍华人姚期智(目前任职于清华大学)是世界顶尖的专家。

    99120

    为什么说1亿用户的Keep是家「快」公司

    近期,国内移动运动应用Keep对外正式宣布注册用户数突破1亿大关,成功晋级移动互联网俱乐部梯队。 ? Keepers突破1亿用户大观 文/黄成甲(微:Alankou) 为什么说Keep是家快公司?...艾瑞数据:未来十年的健身休闲产业规模将由2015年的8000亿增长到2025年的3万亿规模。 1「靠谱」的创业团队 ——一群90后的极客 Keep是猿题库从0到1的重构。...2012年王宁加入猿题库实习,他带着150个实习生做新项目猿题库高考,从找房子、装修、招聘到管理这150人的衣食住行。这段经历不仅使王宁经历了从0到1的过程。...这也是Keep的订单规模一直无法突破的原因,在电商模块100多个SKU 里,以Keep卖的最好的瑜伽垫来说,上线以来,总的销售额也只有6万多,这也只是淘宝大卖家月销量的1/3强。...毕竟Keep是一家没有电商基因的公司,需要搞清楚如何卖货,怎么去搞仓储物流。

    1.1K50

    为什么这段代码输出的是”Hello World”

    Stackoverlfow.com上有一篇有趣的讨论帖: 在这篇帖子里提到了如下的程序: 明明是在程序里使用了java.util.Ramdom()函数产生随机数,为什么每次打出的结果都是Hello world...首先看一下这个程序的工作原理: 通过这句命令首先得到的六个数是: 8 5 12 12 15 0 然后,通过new Random(-147909649).nextInt(27)得到的6个数是: 23 15...关于这个程序的运行原理的解释,最置顶的一个回复如下: “如果java.util.Random是被一个具体的数字做为“随机数种子”而实例化(在本例中是-229985452和-147909649),那么该实例就会以这个随机数种子作为随机算法产生随机数的基础...这就是为什么每次运行该程序都会产生同样的结果的原理啦~ 当然,关于这个话题,高手林立的Stackoverflow上是不缺乏懂行的专家和见解的。...尤其是在复杂的计算环境下的高质量随机数的产生,需要牵涉到非常高深的计算科学和数学方面的理论研究。 在计算机随机数产生的理论研究上,美籍华人姚期智(目前任职于清华大学)是世界顶尖的专家。

    1K20

    JS是如何计算 1+1=2 的?

    Shift+、1的键入,然后回车,输出如下: 谷歌浏览器返回了2。...原来你是将js代码先转成了汇编代码,再将汇编代码转成为机器器,一件事转二道手续,这样能不慢吗?为什么不直接将js代码转为二进制机器码交给CPU大哥执行?”...js是解析型语言,如何直接编译成机器码?如果是这样,它不就和Java一样,是编译型语言了吗?” 浏览器反驳道:“虽然是解释型语言,为什么不能先编译再执行?...看来v8并不知道1+1为什么等于2,v8为了执行js快一点,大量占用了内存空间,是用”空间换时间”的方法,博得了“v8引擎执行快”的美名。具体为什么1+1等于2,还需要问问CPU。...人为什么拥有智能?或者人根本也并不拥有智能,在上帝那里,我们的大脑也只是按照他老人家的设计表现开头状态而已?

    1.9K20

    为什么补码是按位取反加一_补码为什么加1

    因为你想要的,不是1+1=2,而是,1+1为什么等于2。当然,我们不讨论1+1的问题。我们讨论的,是补码。...那么所以我们必须用一种方式来代替正负,也就是我们规定,当然是人规定的,而不是电脑,我们规定这个8位的二进制数的最前面一位数来表示这个数的正负,0代表是正,1代表是负。...后面都是一样,那么现在我们使用上面的编码的方式进行一个计算,现在上面的编码中 1 对应的二进制是00000001,-1对应的二进制是10000001,然后你把这俩二进制数加起来,看看等于几,对,答案是10000010...但是呢,还有一个问题,为什么补码的求法是按位取反再加一呢,其实当你不明白为什么各大书籍都要用按位取反来计算补码的时候,我们完全可以直接用0减去它就得到他相反数的二进制编码了,譬如随便一个十六进制数 6C...现在我们知道了补码是怎么来的,也就是(00000000 – 其中一个正数的补码)=(这个数相反数的补码),那么我们知道了1的二进制是00000001,那么我们来求-1的补码,也就是应该00000000

    70110

    第 1 课:计算机是如何计算 1+1=2 的?

    编程语言的作用是什么?为什么人类不用自己的自然语言进行编程呢,这样不是就不用学习了吗? 人类语言是人与人之间沟通的桥梁,编程语言是人与计算机之间交流的工具。...现在在 Console 面板输入我们的算式: 1+1 按下回车键。 我们看到浏览器输出了 2: ? 这个过程看起来很快,但计算机内部其实已经经过 N 多复杂的运算操作。...如果是这样,它不就和 Java 一样,是编译型语言了吗? 浏览器不服气,虽然是解释型语言,为什么不能先编译再执行?...笔者想,看来 V8 并不知道 1+1 为什么等于 2,它只是将浏览器交给它的代码在内存中编译一遍,然后交给 CPU 执行。...V8 为了执行 JS 更快,大量占用了内存,是用「空间换时间」的方法,在计算机世界博得了「V8 引擎执行 JS 就是快」的美名。具体为什么 1+1 等于 2,还需要问问 CPU。

    1.9K20
    领券