阅读过时书籍《Javascript 高级程序设计》、《Javascript DOM 编程艺术》挖点宝,考古。
JavaScript在XHTML中的兼容#
XHTML中使用嵌入JavaScript使用CDATA#
使用 CDATA 包裹代码来解决 XHTML 解析<``>``&等特殊符号出现问题。
使用 JavaScript 注释来支持 CDATA 块的非 XHTML 兼容浏览器。
下面这种格式适用于所有现代浏览器,虽然现在大多数浏览器已经没这种问题。
<script type="text/javascript">
//<![CDATA[
function compare(a, b) {
if (a < b) {
console.log("A is less than B");
} else if (a > b) {
console.log("A is greater than B");
} else {
console.log("A is equal to B");
}
}
//]]>
</script>
外部引用#
<script src="mainB.js"></script>
<script src="component3.js"></script>
<script src="component4.js"></script>
<script src="component5.js"></script>
无法使用JavaScript的时候给noscript提示#
脚本不可用时让浏览器显示一段话。如果浏览器支持脚本,则用户永远不会看到它。
<!DOCTYPE html>
<html>
<head>
<title>Example HTML Page</title>
<script defer="defer" src="example1.js"></script> <script defer="defer" src="example2.js"></script> </head>
<body>
<noscript>
<p>This page requires a JavaScript-enabled browser.</p>
</noscript>
</body>
</html>
书写习惯#
在控制语句中使用代码块可以让内容更清晰,在需要修改代码时也可以减少出错的可能性。
// 有效,但容易导致错误,应该避免
if (test)
console.log(test);
// 推荐
if (test){
console.log(test);
}
let、var、const#
var#
if (true) {
var name = 'Matt';
console.log(name); // Matt
}
console.log(name); // Matt
- 允许var重复声明,不允许在let之后重复声明
- 声明会自动提升
- 在全局作用域中声明的变量会成为 window 对象的属性
- 在声明之后依然存在
let#
if (true) {
let age = 26;
console.log(age); // 26
}
console.log(age); // ReferenceError: age 没有定义
- 不允许重复声明,不允许在var之后重复声明
- 存在暂时性死区,不会自动提升
- 在全局作用域中声明的变量不会成为 window 对象的属性
- 只存在代码块内部
const#
- 与let大致相同,不允许重复声明
- 修改变量会导致运行时错误(只适用于它指向的变量的引用,object内部修改不受限)
所谓的“提升”(hoist),也就是把所有变量声明都拉到函数作用域的顶部
…持续更新