当 return 语句和对象之间存在换行符时,Javascript 函数无法返回对象?

2024-02-11

这里是jsfiddle http://jsfiddle.net/fzdQP/

完整代码:

function foo1(){
    return {msg: "hello1"};
}
function foo2(){
    return
    {msg: "hello2"};
}

// output = "foo1 =  {"msg":"hello1"}"
console.log('foo1 = ' , JSON.stringify(foo1())); 

//output = " foo2 =  undefined "
console.log('foo2 = ' , JSON.stringify(foo2()));

两者之间的区别在于,在 foo2 中,{msg: 'hello'}是在它自己的新线路中。我期望解析器忽略空格?


tl;dr换行符导致第二个函数中出现“未定义”。 JavaScript 在很多情况下不需要分号,只是在某些上下文中假设它们(自动插入分号 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Lexical_grammar#Automatic_semicolon_insertion).


在某些情况下,为了避免此 ASI 问题并出于美观原因,我使用所谓的分组运算符 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Grouping。例如,与hoquet https://github.com/tjb1982/hoquet模板化 DSL(它将数组作为 s-表达式编译成 HTML),我喜欢对数组进行分组,以便它们清楚地显示 HTML 结构:

return (
  ["ul"
  , ["li"
    , ["span", {class: "name"}, this.name]
    , ["span", {id: "x"}, "x"]
    ]
  ]
);

对我来说,这似乎比

return [
  "ul",
  [
    "li",
    ["span", {class: "name"}, this.name],
    ["span", {id: "x"}, "x"]
  ]
];

他们最终得到相同数量的行。但这确实是一个美学问题。


分组运算符仅计算其中的任何表达式。你通常会看到这个立即调用的函数表达式 https://en.wikipedia.org/wiki/Immediately-invoked_function_expression#Usage,您需要在其中转换通常是函数的内容宣言进入一个表达,然后可以立即调用(因此得名)。然而,分组运算符的一个可能鲜为人知的功能是它还可以采用逗号分隔的表达式列表,例如

function() {
  return (
    doSideEffects(),
    console.log("this is the second side effect"),
    1 + 1
  );
}

在本例中,它计算每个表达式并仅返回最后一个 (1 + 1)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当 return 语句和对象之间存在换行符时,Javascript 函数无法返回对象? 的相关文章

随机推荐

  • mongodb数据库与Java play 2.0

    有教程如何在 Java play 2 0 中使用 mongodb 数据库吗 在官方网站 playframework org 上似乎只有NoSql示例 在 github 上查看这个演示 https github com czihong pla
  • 绘制抗锯齿圆的算法?

    绘制抗锯齿圆的好算法是什么 已填充和未填充 Bresenham 因直线算法而闻名 也有一个圆形算法 吴晓林对直线算法进行了抗锯齿处理 对圆算法也进行了同样的处理 http en wikipedia org wiki Xiaoolin Wu
  • opencv 库的双链表损坏

    嗨 我写了这个简单的程序 Main cpp std vector
  • 使用 countplot() 进行标准化

    下面的代码显示了一个图表 其中包含我的列表中的值的数量 import seaborn as sns sns countplot 0 1 2 3 1 2 1 3 2 1 2 1 3 plt show 我想要带有百分比的相同图 seaborn
  • PHP 中的静态变量

    我发现了有关 PHP 中静态变量的不同信息 但没有任何信息能够真正解释它是什么以及它是如何工作的 我读过 在类中使用静态属性时 该类实例化的任何对象都不能使用静态属性 而该类实例化的对象可以使用静态方法吗 但是 我一直在尝试研究静态变量在不
  • Alpine 3.18 Docker 镜像在使用 & 运行后台命令后不遵守 `sleep` shell 命令

    我一直在使用一个简单的脚本 其中包含一个 while 循环作为 Docker 容器的入口点 每分钟运行一个命令 可以说是一种简单的定时任务 while 循环如下所示 bin sh while true do php script php s
  • T-SQL 舍入与 C# 舍入

    我正在使用微软SQL Server Express https en wikipedia org wiki SQL Server Express2016年写一篇存储过程 https en wikipedia org wiki Stored
  • Freebase 中所有标题/主题标题的文本文件

    我需要一个文本文件来包含 txt 文件中每个标题 每个主题的标题 每个项目的标题 每个标题都占一行 如果我已经下载了 freebase rdf 转储 我该如何执行此操作或进行此操作 如果可能 我还需要一个单独的文本文件 其中每个主题 项目的
  • 在情节中按类别“拆分”

    我正在尝试绘制散点图 每个点都按类别指定颜色 它工作得很好 直到我开始使用 拆分 这行代码显示图例 并且应该通过描述将分类变量 拆分 为不同的类别 这是一个可重现的示例 Load data df soccer lt data frame x
  • 如何使用Font类在Java中设置String的字体大小、样式?

    假设我有一个字符串 Hello World 我想将此字符串的样式更改为粗体字体 并将所有字符的大小从 12 更改为 18 pt 之后我想在 a 中使用这个字符串JLabel and JButton 我怎样才能做到这一点 Font myFon
  • Oauth 2.0 无法从signed_request“code”值获取访问令牌

    我正在迁移到 Oauth 2 0 我当前的网站使用 JS SDK 有一个 fb 登录按钮 然后我访问 Graph 来获取用户详细信息 我在获取访问令牌以从 Graph 获取此数据时遇到问题 一个问题可能是 JS SDK 对话框不会将我重定向
  • 如何以优雅且高效的方式将 python 可调用映射到 numpy 数组?

    规范方法 使用np vectorize 在空数组的情况下不起作用 它以IndexError index 0 is out of bounds for axis 0 with size 0 gt gt gt def f x return x
  • 在 AWS CloudFormation 中定义表、视图和索引

    在 AWS CloudFormation 中 您可以使用 JSON YAML 模板定义服务堆栈 特别是 我正在使用Redshift http docs aws amazon com AWSCloudFormation latest User
  • 如何使用 openCV python 降低 USB 网络摄像头 2.0 的帧速率

    我正在研究Ubuntu 16 04并使用USB 2 0 网络摄像头 我想要降低帧速率不知何故 因为我正在从事的项目需要面部检测 这确实滞后于视频 因此想要降低帧速率 我尝试实现以下代码 import cv2 cap cv2 VideoCap
  • 无法使用 VPN 和代理背后的 crashlytics 构建 Android 应用程序

    作为一名远程工作者 我使用 VPN代理 pac 配置文件位于http proxy mycompany com proxy pac http proxy mycompany com proxy pac 更新包安卓SDK管理器 以下代理设置可以
  • 有没有办法通过 sbt 插件获取项目的所有依赖项?

    我想编写一个 sbt 插件 在其中我需要获取当前项目的所有依赖项的列表 有一些信息 是可能的 是否可以 在我们的项目中 我们使用更新任务来获取库依赖项 update map updateReport gt updateReport sele
  • 将文件夹添加到收藏夹并更改文件夹图标 [Electron macOS]

    一周以来 我一直在寻找一种解决方案 将带有特定图标的文件夹添加到收藏夹侧边栏 就像 Dropbox 所做的那样 有什么解决方案可以用 Electron 或 Objective C 来做到这一点吗 到目前为止我发现了什么 自己拖放 filei
  • 每个数据组合的特殊组编号

    我想为每对行分配不同的组号 对于某些配对 分配唯一的编号作为组编号 edit 我们可以认为这些是成对存在于数据中的 如果这些对存在于行中 则为它们分配一个组号 直到出现下一对 因为真实数据中可能还有其他数据行 这是示例数据 names lt
  • Seaborn中轴标签的字体大小

    在seaborn中 如何仅更改x轴和y轴标签字体大小 有没有办法专门更改轴标签 而不是使用 设置上下文 方法 这是我的代码 def corrfunc x y kws r stats pearsonr x y 0 2 ax plt gca a
  • 当 return 语句和对象之间存在换行符时,Javascript 函数无法返回对象?

    这里是jsfiddle http jsfiddle net fzdQP 完整代码 function foo1 return msg hello1 function foo2 return msg hello2 output foo1 msg