问答详情
源自:2-5 表达出你的想法(表达式)

关于变量未定义和未赋值的问题

<script type="text/javascript">
  var num1=10-5;
  var num2=6+num1;
  document.write("小明还剩:"+num1+"元"+"<br>");
  document.write("小红花:"+num2+"元买个铅笔盒");
</script>

这是原代码,如果将代码进行下述修改后,为什么会出现这种情况?

a.如果删除2.3行代码,代码全部不会显示,包括“小明还剩”等document.weite()里的。

b.如果第2.3行改为

var num1;
var num2;

的话,即只定义不赋值,输出的num值是undefined。

c.如果2.3行代码互换

  var num2=6+num1;
  var num1=10-5;

输出的num2是NaN。

d.我在慕课网站上先成功运行一次后,再进行我的上述操作,右侧小窗口输出的都是第一次的正确代码。

感谢解答

提问者:Jeoop 2017-04-19 09:03

个回答

  • 吱吱叫的老鼠
    2017-05-27 22:21:58
    已采纳

    a:删除第二第三行,num1和num2 没有被定义,整个js不能正确运行,所以不会执行第二行以后的代码;

    b:修改成var num1;var num2,变量被定义,但是没有赋值,系统会给一个默认值,就是undefined

    c:2.3行互换,NaN是未知错误,系统无法判定num1的类型,至于为啥可以运行,我猜测是因为num1 前面的+号

    d:你没有点击提交按钮,所以右侧的窗口还是你修改前的效果


  • 慕斯慕斯
    2017-12-22 23:40:04

    感谢提出这个问题以及回答问题的各位!拓展了自己的思路

  • 慕雪4479503
    2017-12-01 13:35:26

    补充c点:2.3行互换,num1虽在后面定义并赋值,但声明提前(即把定义提到代码顶部),它的值为undefined。

                   +号运算,javascript优先期望操作数为数字,因此,javascript会把undefined隐式转换为NaN,转

                   换结果无意义,6+NaN表达返回NaN(中文意思:不是一个数字)。

  • 慕后端8678366
    2017-04-19 09:27:37

    只定义了变量,没有赋值,输出就是undefined.