相关知识来自于一道题:

使用ES6的箭头函数语法可以直接省略 functionreturn 关键字,比如 function (){return 1;} 就可以简化成 () => 1 , 但是如果需要返回对象时需要加一个括号,比如 () => ({a:1}), 因为JS解释器会误把大括号当作函数的起始符号,需要加上一个括号。那如果没有这个括号会怎么样呢?

() => {a:1} 会输出什么?还是说会报错?

不管怎么样,直接打开F12先试一下

  1. const f = () => {a:1};
  2. f(); // undefined

返回了undefined,说明代码是能跑的,那又为什么是undefined呢,a和1跑哪去了?

回头查了一下JS中关于冒号的作用,常用的有:

  1. ?:三元运算
  2. switch语句
  3. 对象字面量

另外还有一个不常用容易忘记的:

作为一个label标签,用于与 break 和 continue 配合,让语句跳转到指定的位置,类似 goto 的作用。直接放两个示例,很容易看出它的用途,虽然也不常这么用。

continue

  1. a: for(let i = 0; i < 5; i++){
  2. for(let j = 0; j < 5; j++){
  3. if(j===2) continue a;
  4. console.log(i,j);
  5. }
  6. }
  7. /*
  8. 输出结果:
  9. 0 0,
  10. 0 1,
  11. 1 0,
  12. 1 1,
  13. ...
  14. 4 0,
  15. 4 1
  16. */

break

  1. b: for(let i = 0; i < 5; i++){
  2. for(let j = 0; j < 5; j++){
  3. if(j===2) break b;
  4. console.log(i,j);
  5. }
  6. }
  7. /*
  8. 输出结果:
  9. 0 0,
  10. 0 1
  11. */

到这里就知道为什么返回undefined了,因为 {a:1} 中的 a:被当成了一个标签,就剩下一个1没有return语句。

除此之外,标签还可以换行写,所以 {a:1}就等于

  1. {
  2. a:
  3. 1
  4. }

因此, () => {a:1,b:2} 是会报错的,因为等价于

  1. {
  2. a:
  3. 2,
  4. b:
  5. 1
  6. }

再由此可以推断出另一个东西 () => {a:b:c:d:1}不会报错而是返回undefined

总结

本文全来源于一道与JS语法相关的题目,虽然在开发过程中并没有什么卵用,但是说不定哪天面试就用上了呢?

最后祝大家五一快乐。

参考

js中冒号的作用

JavaScript权威指南(6th)

JS中的与冒号的作用、箭头函数相关的一道题的更多相关文章

  1. asp.net类似于js中的setTimeOut()的函数作用?

    asp.net类似于js中的setTimeOut()的函数作用? 插入这行即可,定时2秒,再运行下一步: System.Threading.Thread.Sleep(); 加个随机数 Random r ...

  2. c# 冒号:C#中两个冒号(::)的作用

    global::System.Console.WriteLine(number); 冒号在什么地方用. 点是空间下类,表示下一层的意思? 这里面::前面是GAC的标示符global,用法比较特殊,和. ...

  3. 在js中,window != top 的作用

    在网站的首页加上下面的javascript,就可以把自己的窗口变成是最前端的窗口.可以避免别人把你的网站放在他的iframe中,显示的就是他的网站了,误导浏览者. <script type=&q ...

  4. js中call和apply的作用和用法

    call和apply的用途是完全一样的.改变函数中this的指向: 为什么要改变this的指向呢?这个有什么用?有哪些场景呢? 首先this的指向总是在变的,this的指向是由函数执行时所在的环境决定 ...

  5. (三目运算符)PHP中问号?和冒号: 的作用

    <表达式1>?<表达式2>:<表达式3>; "?"运算符的含义是: 先求表达式1的值, 如果为真, 则执行表达式2,并返回表达式2的结果 ; 如 ...

  6. js中的throw err的作用

    1.阻止程序的运行 2.把错误消息打到控制台

  7. 【原创】js中利用cookie实现记住密码功能

    在登录界面添加记住密码功能,我首先想到的是在java后台中调用cookie存放账号密码,大致如下: HttpServletRequest request HttpServletResponse res ...

  8. JS中实现种子随机数

    参数: 详谈JS中实现种子随机数及作用 我在Egret里这么写... class NumberTool{ /**种子(任意默认值5)*/ public static seed:number = 5; ...

  9. js中$

    $符号在php中是表示变量的特征字符, 在js中它也有很多作用, 一般我们用来命名一个函数名称,获取id的1.首先可以用来表示变量, 比如变量 var s='asdsd'或var $s='asdasd ...

随机推荐

  1. webpack使用中遇到的相关问题

    问题一:使用webpack打包jquery后,在页面使用错误信息:$ is not defined new webpack.ProvidePlugin({ "$": "j ...

  2. Linux 中常用的基础命令二

    1.Linux文件分层结构  FHS:Linux有一个组织叫LSB定义的Linux发行版基础目录名称命名法则及功用规定,这种标准叫FHS文件系统层级标准./bin   存放可执行的二进制程序,管理员和 ...

  3. Mysql错误:#1054 - Unknown column '字段名' in 'field list'

    # 1054 - Unknown column '字段名' in 'field list' 第一个就是你的表中没有这个字段 另一个就是你的这个字段前后可能有空格!!!,去掉空格即可!

  4. python网络爬虫高清PDF资料分享

    1.python+网络爬虫开发实战中文PDF高清版 链接:https://pan.baidu.com/s/1bks8J9kgqCArUlEoDg4acA 提取码:h9y2 复制这段内容后打开百度网盘手 ...

  5. github发布博客

    创建github项目:  名字为:{{你的帐号}}.github.io clone项目,创建并提交推送一个index页面 如: <!DOCTYPE html> <html> & ...

  6. hdu 2435 dinic算法模板+最小割性质

    #include<stdio.h> #include<queue> #include<string.h> using namespace std; #define ...

  7. Window7幻灯片字体显示混乱,难道真的是病毒么

    这个问题有几天了.就是在其它人的PowerPoint2010做的ppt文件.发到这台有问题的电脑上(PowerPoint2007)就会显示全然不一样.例如以下所看到的. watermark/2/tex ...

  8. 关于App class loader的总结

    关于App class loader的总结 2010-05-11 15:19:09 分类: 系统运维 Java本身是一种设计的非常简单,非常精巧的语言,所以Java背后的原理也很简单,归结起来就是两点 ...

  9. maven冲突管理及依赖管理实践

    1.“最近获胜策略(nearest wins strategy)”的方式处理依赖冲突 Maven采用“最近获胜策略(nearest wins strategy)”的方式处理依赖冲突,即如果一个项目最终 ...

  10. Node.js:连接 MongoDB

    ylbtech-Node.js:连接 MongoDB 1.返回顶部 1. Node.js 连接 MongoDB MongoDB是一种文档导向数据库管理系统,由C++撰写而成. 本章节我们将为大家介绍如 ...