【问题标题】:Developer tools console logs 3 for a=3 and undefined for var a = 3 [duplicate]开发人员工具控制台日志 3 为 a = 3,未定义为 var a = 3 [重复]
【发布时间】:2018-08-04 14:42:10
【问题描述】:

在 chrome 开发人员工具中,当我键入
a = 3 时会记录 3var a = 3 记录 undefined

为什么第一个语句返回 3 而第二个不返回?

【问题讨论】:

  • a = 3 是一个表达式。

标签: javascript developer-tools


【解决方案1】:

因为它就是这样。

var 开头的语句是一个声明。声明本身并没有价值。他们告诉计算机做某事(创建一个变量,可以选择一些初始值)。

但是赋值表达式是不同的。 a = b 计算为(或“具有”)a 的新值,以便允许链接,例如 a = b = c = d

他们是否可以让var a = b 成为一个表达式并评估为什么?当然,可能。但是以这样的方式来扼杀语言语法绝对没有任何用处。

阅读编程语言中的语句表达式

【讨论】:

    【解决方案2】:

    因为undefinedvar 语句的结果。

    语句实际上并没有可以在你的代码中使用的“结果”,但是程序有一个最终结果,你在控制台中的单行代码作为一个程序被评估。

    【讨论】:

    • 不要混淆评估和执行。
    • @LightnessRacesinOrbit:嗯,在eval“评估”一段代码并提供其结果的意义上,它是“评估的”。代码被评估为一个完整的程序,不一定是单个表达式。
    • 当 C 或 C++ 程序向周围环境返回一个值时,浏览器中的 JavaScript 并非如此。程序结果的价值是什么?没有一个。同样,参考您对瑞诗凯诗的回答的评论,您说var a = 3“肯定被评估过”,但鉴于它没有价值,显然不是这样。
    • @LightnessRacesinOrbit:它确实有一个值,只是不能在程序中作为值访问,除非在程序中使用eval 来执行它。例如:var x = eval("for (var i = 0; i < 10; i++) {i}"); console.log(x); // 9
    • 那是completion value。这不是“程序的结果”;它是所述程序中最后一个评估表达式的值。挑一个只有一个表情的程序就是作弊!
    猜你喜欢
    • 1970-01-01
    • 2011-08-21
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 2013-11-11
    • 2019-07-09
    • 1970-01-01
    • 2017-09-19
    相关资源
    最近更新 更多