阿里云最近在做促销,低至20折,有兴趣的可以看看:https://promotion.aliyun.com/...为了保证更好的可读性,这个文章采用意译而非直译。javaScript通常被认为是最容易入门的语言,也是最难掌握的语言,我完全同意。这是因为JavaScript是一种非常古老且非常灵活的语言,具有神秘的语法和过时的功能。我已经使用JavaScript多年,直到现在,我偶尔会发现一些我以前不知道的隐藏语法或技巧。虽然这些属性可能鲜为人知,但它们仍然广为人知。想阅读更多优质文章,请戳GitHub博客,一年百篇优质文章等你来!注意:这里不包括变量提升、闭包、代理、原型继承、异步等待、生成器等。void运算符JavaScript有一个一元void运算符。你可能见过它被用作void(0)或void0。void的作用是返回undefined,它右边的操作数会正常计算,但不管结果是什么,void都会返回undefined。使用“0”只是一种约定。不必使用'0',它可以是任何有效的表达式,如void,它仍然返回未定义。//voidoperatorvoid0//返回undefinedvoid(0)//返回undefinedvoid'abc'//返回undefinedvoid{}//返回undefinedvoid(1===1)//返回undefinedvoid(1!==1)//返回undefinedvoidanyfunction()//返回undefined为什么要创建一个特殊的关键字来返回undefined而不是仅仅返回undefined?听起来有点多余,不是吗?Funfact实际上,在ES5之前,在大多数浏览器中,你可以为原来的undefined="abc"赋一个新值。因此,在那些日子里,使用void是一种确保始终返回undefine原始值的方法。构造函数括号是可选的是的,我们在调用构造函数时在类名后面添加的括号——完全可选!?(前提是没有参数需要传递给构造函数)下面的两种代码风格都被认为是有效的JS语法,结果是一样的!//带括号的构造函数constdate=newDate()constmonth=newDate().getMonth()constmyInstance=newMyClass()//不带括号的构造函数constdate=newDateconstmonth=(newDate).getMonth()constmyInstance=newMyClassIIFE(立即执行函数)的括号可以省略IIFE(立即调用函数表达式)的语法我总觉得有点奇怪,为什么要有那么多括号呢?其实那些多出的括号只是告诉JavaScript解析器,要解析的代码是函数表达式,而不是函数。了解了这一点,您可以想象有很多方法可以省略那些额外的括号并仍然有效地使用IIFE。//IIFE(function(){console.log('NormalIIFEcall')})()//CleanIIEFvoidfunction(){console.log('CoolIIFEcall')}()void运算符告诉解析器该代码是一个函数表达式。因此,我们可以跳过函数定义周围的括号。你猜怎么了?我们可以使用任何一元运算符(void、+、!、-等),它仍然有效!这不是比原来的更简单,更B-cased吗?但是,如果您是敏锐的观察者,您可能会想,一元运算符不会影响IIFE返回的结果吗?它会影响结果。但好消息是,如果您只想返回结果并将其存储在某个变量中,则不需要额外的括号。With语句JavaScript有一个with语句块,with实际上是JS中的一个关键字。with块的语法如下:with语句可以方便地用于引用特定对象上的现有属性,但不能用于向对象添加属性。要在对象上创建新属性,必须显式引用该对象。?有趣的事实with块看起来很酷,对吧?它甚至比对象破坏更好。好吧,不是真的。通常不鼓励使用with语句,因为它在严格模式下完全被弃用和禁止。事实证明,使用with块会增加语言中的一些性能和安全问题。函数构造函数函数语句不是定义新函数的唯一方法。可以使用function()构造函数和new运算符动态定义函数。?有趣的事实Function构造函数是JavaScript中所有构造函数之母。甚至Object的构造函数也是Function构造函数。而Function自身的构造函数也是Function本身。所以调用object.constructor.constructor...足够多次最终将在JavaScript中的任何对象上返回Function构造函数。函数属性我们都知道函数是JavaScript中的一流对象。所以没有人阻止我们向函数添加自定义属性。在JS中这样做是有效的,但是很少使用。那么我们什么时候做呢?这里有一些很棒的用例。例如,可配置函数假设我们有一个名为greet的函数。我们希望函数根据不同的地区打印不同的问候语,这个语言环境也应该是可配置的。我们可以在某处维护一个全局语言环境变量,或者使用如下函数属性实现函数functiongreet(){if(greet.locale==='ch'){console.log('China,hello')}elseif(greet.locale==='jp'){console.log('Hello!')}else{console.log('HelloWorld')}}greet()//HelloWorldgreet.locale='ch';greet()//China,hello另一个带有静态变量的函数的类似例子。假设您要实现一个生成有序数字序列的数字生成器。通常,您会使用带有静态计数器变量的类或IIFE来跟踪最后一个值。这样我们就限制了对计数器的访问,也避免了额外变量污染全局空间。但是,如果我们想要在不污染全局空间的情况下灵活地读取甚至修改计数器怎么办?我们仍然可以创建一个带有计数器变量的类和一些额外的方法来读取它;或者我们可以偷懒并使用函数定义的属性。Arguments属性我相信你们中的大多数人都知道函数中的arguments对象。它是一个类似数组的对象,可以在所有函数中使用。它具有调用函数时传递给函数的参数列表。但它还有一些其他有趣的属性:arguments.callee:当前调用的函数arguments.callee.caller:调用当前函数的函数注:虽然ES5禁止在严格模式下使用callee&caller,但在很多编译库中仍然很常见。因此,学习它们是值得的。带标签的模板字符串模板字符串文字是ES6中众多很酷的新增功能之一,但是,知道带标签的模板字符串相对较少吗?标记的模板字符串允许您向模板字符串添加自定义标签,以更好地将模板文字解析为字符串。标签只是一个解析器函数,它接受字符串模板解释的所有字符串和值的数组,标签函数应该返回最终的字符串。在下面的示例中,我们的自定义标记——Highlight,解释模板文本的值并将解释的值包装在结果字符串中,使用元素进行突出显示。Getters&SettersJavaScript对象在大多数情况下都很简单。假设我们有一个用户对象,我们正在尝试使用user访问它的年龄属性。使用user.age获取age属性的值,如果未定义,则为undefined。然而,它不必那么简单。JavaScript对象具有getter和setter的概念。我们可以编写自定义Getter函数来返回我们想要的任何内容,而不是直接返回对象的值,设置值也是如此。这使得我们在获取或设置字段时拥有强大的能力,例如虚拟字段、字段验证、副作用。逗号运算符JavaScript有一个逗号运算符。它允许我们在一行中用逗号分隔多个表达式,并返回前一个表达式的结果。在这里,将计算所有表达式,并将结果变量分配给expressionN返回的值。我们经常在for循环中使用逗号运算符for(vara=0,b=10;a<=10;a++,b--)有时一行写多条语句functiongetNextValue(){returncounter++,console.log(counter),counter}或constgetSquare=x=>(console.log(x),x*x)+plusoperator想快速将字符串转换为数字?只需在字符串前面加上+运算符。加号运算符也适用于负数、八进制、十六进制和指数值。更重要的是,它甚至可以转换Moment.js对象的日期或时间戳!!!该运算符在技术上不是单独的JavaScript运算符。它只是使用了两次的JavaScript逆运算符。如果表达式的计算结果为真,则返回真;否则返回假。~NOT运算符让我们面对现实吧——没有人关心按位运算符。我们什么时候使用它!这是波浪号或按位NOT运算符的日常用例。事实证明,NOT运算符在与数字一起使用时有效~N=>-(N+1)此表达式仅在N为-1时计算为“0”。我们可以通过将~放在indexOf(...)函数的前面来利用这一点,该函数执行布尔检查该项目是否存在于字符串或数组中。注意:ES6和ES7分别在字符串和数组上添加了一个新的.include()方法。当然,这是一种比波浪号运算符更简洁的检查数组或字符串中是否存在项目的方法。break和continue语句都可以与lebel语句结合使用,以返回到代码中的特定位置。用于嵌套循环,减少循环次数。原文:https://blog.usejournal.com/l...你的点赞是我继续分享好东西的动力,欢迎点赞!干货交流系列文章总结如下。我觉得点个Star就好了。欢迎加群,互相学习。https://github.com/qq44924588...我是小智,公众号《大招天下》的作者,前端技术爱好者。我会经常分享自己学习看到的干货,在进步的路上互相鼓励!关注公众号,后台回复福利,就能看到福利,你懂的。