这13个好用的JavaScript特性,估计你都没用过( 三 )

这在可变参数功能中特别有用 。
八、跳过 ()你是否知道实例化对象时可以跳过方括号 () ?
例如:
class D {    logger() {        console.log("D")    }}// 一般情况下,我们这么做:(new D()).logger(); // D// 其实,我们可以跳过 ():(new D).logger(); // D// 并且它可以正常运行即使在内置类中,括号也是可选的:
(new Date).getDay();(new Date).getMonth();(new Date).getYear();九、voidvoid 是 JS 中的关键字,用于评估语句并返回未定义 。
例如:
class D {   logger() {        return 89    }}const d = new Dconsole.log(void d.logger()) // undefinedlogger 方法应该返回 89 ,但是 void 关键字将使其无效并返回 undefined  。
我曾经读到过 undefined 之前可能会被赋予另一个值,而这会伪造其语义 。因此,使用 void 运算符可确保你得到一个真正的 undefined  。也用于最小化目的 。
十、通过 `proto` 继承_proto_ 是从 JavaScript 中的对象继承属性的方法 。__proto__ 是 Object.prototype 的访问器属性,它公开访问对象的 [[Prototype]]  。
此 __proto__ 将其 [[Prototype]] 中设置的对象的所有属性设置为目标对象 。
让我们看一个例子:
const l = console.logconst obj = {    method: function() {        l("method in obj")    }}const obj2 = {}obj2.__proto__ = objobj2.method() // method in obj我们有两个对象常量:obj 和 obj2  。obj 具有 method 属性 。obj2 是一个空的对象常量,即它没有属性 。
我们访问 obj2 的 __proto__ 并将其设置为 obj  。这会将通过 Object.prototype 可访问的 obj 的所有属性复制到 obj2  。这就是为什么我们可以在 obj2 上调用方法而不会在没有定义的情况下得到错误的原因 。
obj2 继承了 obj 的属性,因此 method 方法属性将在其属性中可用 。
原型可用于对象,例如对象常量、对象、数组、函数、日期、RegEx、数字、布尔值、字符串 。
十一、一元运算符 +一元 + 运算符将其操作数转换为数字类型 。
+"23" // 23+{} // NaN+null // 0+undefined // NaN+{ valueOf: () => 67 } // 67+"nnamdi45" // NaN当我们希望将变量快速转换为 Number 时,这非常方便 。
十二、一元运算符 -一元运算符 - 将其操作数转换为 Number 类型,然后取反 。
该运算符将一元 + 运算符的结果取反 。首先,它将操作数转换为其 Number 值,然后取反该值 。
-"23" // -23此处发生的是,字符串 "23" 将转换为其数字类型,从而得到 23  。然后,此正数将转换为其负数形式 -23  。
-{} // NaN-null // -0-undefined // NaN-{ valueOf: () => 67 } // -67-"nnamdi45" // NaN如果转换为数值的结果为 NaN ,则不会应用取反 。
取负 +0 产生 -0 ,取负 -0 产生 +0  。
- +0 // -0- -0 // 0十三、指数运算符 **该运算符用于指定数字的指数 。
在数学中,2 的 3 次方意味着将 2 乘以 3 次:
2 * 2 * 2我们可以使用 ** 运算符在 JS 中进行相同的操作:
2 ** 3 // 89 ** 3 // 729来源本文来翻译自
https://blog.bitsrc.io/features-of-javascript-you-probably-never-used-4c117ba3f025
想学习JavaScript,可以点击:了解更多 即可学习免费视频




推荐阅读