当前位置: 首页 > 科技观察

你可能没用过的JavaScript特性

时间:2023-03-18 02:20:51 科技观察

JavaScript有很多常用的特性。但是,有些功能我们大多数人可能不会使用。在本文中,我们描述了其中一些功能和可能的用例。标记模板文字标记模板文字是作用于模板字符串的函数。它们通常用于React库,例如styled-components库。这个功能其实很有用。它使我们能够轻松地解析模板字符串文字。它允许我们使用函数来解析模板文字。例如,我们可以这样使用:consttag=(strings,...vals)=>{console.log(strings);console.log(vals);}constname='foo';tag`Hi${name}`;在上面的代码中,我们有he标记函数和vals数组,它有一个包含部分字符串的字符串函数,它具有插入到字符串中的值。在上面的例子中,我们有一个数组,其中'Hi'和''作为字符串的值。在vals数组中,我们有“foo”。我们可以使用它来返回要返回的对象。例如,我们可以将标签函数重写为:consttag=(strings,...vals)=>{return`${strings[0]}!${vals[0]}`}在上面的代码中,我们从获取字符串和vals中的字符串部分开始,然后放入!。两个表达式之间。然后我们打招呼!foo为返回值。逗号运算符逗号运算符始终返回由逗号运算符分隔的项目列表中的最后一项。例如,我们可以这样使用:constfoo=(1,2,3);然后我们得到3。它可以采用任何表达式并始终返回最后计算的表达式。With运算符绝对是我们不应该使用的运算符。在严格模式下禁止。该运算符为语言增加了一些性能和安全问题。它用于扩展语句的作用域链。它的用法如下:with(expression)statementor:with(expression){statementstatement...}在上面的代码中,我们围绕表达式创建了一个新的作用域。块中的所有语句都将表达式作为父作用域。例如,我们可以这样使用它:constobj={a:1,b:2,c:3}with(obj){console.log(a,b,c);}在上面的代码中,with块其中的所有表达式都将在相对于obj对象的范围内。所以a,b,c其实就是obj.a,obj.b,obj.c。与with一样,块作用域变量在with块之外不可用。例如,如果我们有:constobj={a:1,b:2,c:3}with(obj){console.log(a,b,c);letx=1;}console.log(x);如果尝试在x上调用console.log,当在with块之外引用x时会出现错误。Inin运算符可用于检查属性是对象的一部分还是原型链中的任何原型。如果属性在对象或原型链中的任何属性中,则返回true,否则返回false。例如,如果我们有以下类结构和对象:classFoo{constructor(){this.a=1;}}classBarextendsFoo{constructor(){super();this.b=2;this.c=3;}}constbar=newBar();然后,如果我们记录以下表达式的返回值:console.log('a'inbar);console.log('b'inbar);console.log('c'inbar);我们认为所有的日志都是正确的。这是因为bar有一个Foo实例作为它的原型,而in运算符检查对象本身及其原型的属性。因此,inbar也是如此。如果我们只想检查该属性是否是非继承属性,我们必须使用obj.hasOwnProperty方法,其中obj是任何没有null原型的JavaScript对象。结论标签的模板文字可用于将模板字符串转换为所需的值。逗号运算符始终返回逗号分隔列表中的最后一项。in运算符检查属性是否在对象或其原??型中。是不应该在你的javascript代码中的东西。