es6

58 阅读3分钟

走入ES6

<head>
    <script src="1.js" defer></script>
    <script src="2.js" asnyc></script>
</head>
<body>

</body>

异步加载:**用defer和async的方式进行js的引进,都会让script标签进行异步的加载,不会被script标签阻塞,如果去掉defer和async的话是同步执行的,必须把js代码引进完毕才能执行后面的代码,但defer和async是有区别的,async是异步的引入js,然后继续执行body进行页面的渲染的,但是当async是当一旦下载完后会,渲染引擎会立即中断渲染,会立即执行脚本的内容(使用async会有可能导致访问依然找不到节点),而defer是等所有的dom即整个body都全部渲染完毕后,再将js代码执行,async执行的更靠前,defer执行的更靠后一些。**defer会更靠谱些。

  • es6模块化默认就支持异步加载,用法跟defer类似。

使用script标签会导致不是私密的,2.js可以访问1.js中的函数,也许1.js中的一个函数不允许外界访问,甚至两个js文件都有一个相同名字的函数,导致重名(此时,谁在下面谁被调用)同时如果有一个3.js文件需要同时用到1.js和2.js的函数时,必须把它放到两个1.js和2.js引进script标签的后面,不然会报错,这也是依赖的问题。

随着项目增大,使用script去加载一定会遇到上述问题,于是可以用es6模块化解决这些问题

<script src="1.js" type=“module”></script>
这种写法就可以支持模块化,支持异步加载了,同时保证了你在html中想访问1.js的方法是访问不到,做到了私密不漏。

在 ES6(ECMAScript 2015)以及后续的 JavaScript 版本中,并没有直接支持使用 ?? 运算符。这个运算符似乎是一种打字错误或误解。然而,在 JavaScript 中有一个与 ?? 非常相似的运算符,它被称为 "空值合并运算符" 或 "空值合并操作符",用于处理变量或表达式可能为 nullundefined 时的情况。这个运算符是 ??,它的语法如下:

const result = a ?? b;

这里的 ?? 运算符的作用是,如果 a 的值不是 nullundefined,则返回 a 的值;否则,返回 b 的值。这个运算符非常有用,可以用来提供默认值或处理可能的空值情况。

const defaultValue = "Default Value";
const userInput = null;

const result = userInput ?? defaultValue;

console.log(result); // 输出 "Default Value",因为 userInput 为 null

在这个示例中,如果 userInput 不是 nullundefined,则 result 变量将采用 userInput 的值;否则,它将采用默认值 "Default Value"

它是一种非常实用的工具,用于处理空值情况,提供更稳健的代码。

当你尝试使用对象的属性访问语法 role[key] 来访问对象中不存在的属性 key 时,JavaScript 不会引发错误,而是返回 undefined。这是 JavaScript 中的默认行为,用于处理不存在的属性访问。

例如,假设有一个名为 role 的对象,但该对象不包含属性 "key",那么尝试使用 role["key"] 访问它将返回 undefined,如下所示:


const role = {
  name: "Admin",
  permissions: "read, write",
};

const key = "nonExistentProperty";
const value = role[key];

console.log(value); // 输出 undefined

在上面的示例中,role 对象没有名为 "nonExistentProperty" 的属性,因此 role["nonExistentProperty"] 返回 undefined。这是 JavaScript 中处理对象属性访问的一种行为,通常可以用于检查属性是否存在或处理不存在的属性的情况。