1. script标签的位置:① 放在body后面 ,先渲染页面
②推迟执行脚本defer <script defer src="../a.js"></script> ,脚本会在整个页面都解析完毕之后再加载a.js; defer适用于外部引入的文件。
③异步执行脚本async ,<script async src="example2.js"></script>
async和defer的区别:
如果script脚本都加了defer,那么会按照出现的顺序,第一个defer加载完再加载第二个。在页面渲染之后,DomcontentLoaded 事件之前。
如果script脚本都加了async,那么顺序是不确定的,谁先加载完谁先执行。DOMContentLoaded事件的触发并不受async脚本加载的影响
④动态加载脚本。createElement
2.如果浏览器不支持script脚本,那么 可以使用<noscript></noscript>标签 ,写在body标签里面。
3.
let message; // 这个变量被声明了,只是值为 undefined
// 确保没有声明过这个变量
// let age
console.log(typeof message); // "undefined"
console.log(typeof age); // "undefined"
//这两个打印出来都是"undefined"。。所以后续我们实际上应该在声明变量的时候就给予初始值,否则后面判断不知道是没有声明还是没有初始化。。
4.
模板字面量 反引号,插值使用${value} 进行占位.插值${value} 会使用toString() 强制将value值转换成字符串。
`${ value } to the ${ exponent } power is ${ value * value }`;
5.
class Bar {}
class Baz extends Bar {
static [Symbol.hasInstance]() {
return false;
}
}
let b = new Baz();
console.log(Bar[Symbol.hasInstance](b)); // true
console.log(b instanceof Bar); // true
console.log(Baz[Symbol.hasInstance](b)); // false //判断b是否属于Baz的实例对象,由于Baz自定义了Symbol.hasInstance,
//所以导致这里返回的都是false
console.log(b instanceof Baz); // false