顶级对象的属性
众所周知,浏览器全局上下文指的是窗口,而节点指的是全局对象。在es6中,顶级对象属性相当于全局变量。
window.a = 1
a // 1
a = 2
window.a // 2
从上面的代码可以看到,顶级对象的属性赋值和全局变量的赋值是一样的。
es6 保持了两者之间的兼容性。 var 和 function 命令声明的全局变量仍然是顶级对象的属性。 let const calss 命令声明的全局变量不属于顶级对象属性。
var a = 1
window.a // 1
let b = 2
window.b // undefined
全局此对象是
在javaScript中,有一个顶级对象提供全局上下文(即全局作用域),所有代码都在该上下文中运行。但顶级对象在不同的实现中并不统一。
es2020 引入了 globalThis 作为语言标准级别的顶级对象。这意味着 globalThis 存在于任何环境中,并且您可以通过在全局环境中指向它来获取顶级对象。
解构数字和逻辑值
构造赋值时,如果等号右边是数值或者布尔值,首先会被转换为对象。
let {toString: s} = 123;
s === Number.prototype.toString // true
let {toString: s} = true;
s === Boolean.prototype.toString // true
上面的代码中,数值和逻辑值的包装对象具有toString属性,因此变量s可以接收该值。
构造赋值的规则是,只要等号右边的值不是对象或数组,就先将其转换为对象。
null 和 undefined 无法转换为对象,因此它们的构造和赋值会导致错误。
标签模板
模板字符串函数后面可以紧跟一个函数名称,调用该函数名称来处理模板字符串。这是一个标签模板。
标签模板不是模板,而是俄语函数调用的一种特殊形式。标签引用函数,紧跟其后的模板字符串是其参数。
但是,如果模板字符串中有变量,它会在调用函数之前将模板字符串处理成多个参数。
function tag() {
return 'tag';
}
let name = "Joh";
var res = tag`hello ${name}`;
console.log(res); // tag
上面的代码、原始标签函数和模板字符串的组合使模板失效。
标签模板的一个重要用途是过滤 HTML 字符串,以防止用户输入恶意内容
指数运算符
** 是指数运算符
2 ** 2 // 4
2 ** 3 // 8
// 运算符的一个特点是右结合。多个指数运算符连用时,是从最右边开始计算的。
2 ** 3 ** 2 // 512
let a = 1.5
a **= 2 // 等价于 a = a * a
let b = 4
b **=3 // 等价于 b = b * b * b
BigInt 类型
是es2020引入的新数据类型(基本类型)。
BigInt 仅用于显示整数,位数不受限制,可以精确表示任意位数的整数。对于
BigInt类型的数据,必须添加后缀ntypeof 123n // 'bigint'
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。