上方)
原因:浏览器会按照代码在文件中的顺序加载HTML,如果先加载的JavaScript想修改下方的HTML,可能由于HTML尚未加载而失效。
<script>
标签引入外部JavaScript文件。1 | <body> |
onclick
等事件属性。1 | <button onclick="alert('Hello')">点我</button> |
;
结尾,但是可以省略。风格统一,要么都加要么都不加。1 | document.write("Hello World!"); |
1 | alert("Hello World!"); |
1 | console.log("Hello World!"); |
name
。1 | var name = prompt("请输入你的名字:"); |
let name = "Tom";
name = "Jerry";
1 | var有一些不合理之处,比如变量提升、全局变量污染等,所以在ES6中引入了let和const。 |
1 | let arr = [1, 2, 3, 4, 5]; |
const PI = 3.14;
JavaScript是一种弱类型语言,变量不需要指定数据类型,可以存储任何类型的数据。
NaN:Not a Number,表示不是一个数字,黏性,任何数和NaN计算都是NaN。NaN与NaN不相等。
模版字符串:反引号包裹,可以换行,可以插入变量,使用${}
。
null和undefined的区别:
检测数据类型:
类型转换:
对变量进行赋值的运算符。
1 | let a = 10; |
对一个变量进行操作的运算符。正负号、自增自减。
1 | let a = 10; |
前置自增自减:先加先减。
后置自增自减:先赋值再加减。
比较两个值的大小,返回布尔值。
1 | let a = 10; |
字符串比较:比较的是Unicode编码,从第一个字符开始比较,如果相等则继续比较下一个字符,直到不相等为止。
逻辑运算符用于连接两个或多个表达式,返回布尔值。
顺序结构、分支结构、循环结构。
1 | if (条件) { |
1 | if (条件1) { |
1 | switch (表达式) { |
条件 ? 成功执行 : 失败执行
三要素:变量起始值、终止条件、变量更新。
1 | while (条件) { |
1 | for (初始化; 条件; 更新) { |
1 | let arr = [1, 2, 3, 4, 5]; |
无限循环是一种循环结构,没有终止条件,只能通过break跳出。
1 | for (;;) { |
循环嵌套:在循环中再嵌套一个循环。
1 | for (let i = 0; i < 5; i++) { |
1 | let arr = [1, 2, 3, 4, 5]; |
1 | // 默认值,如果没有传入参数,就使用默认值 |
1 | function outer() { |
1 | let fn = function() { |
1 | (function() { |
1 | let fn = () => { |
1 | let obj = { |
let obj = {name: "Tom", age: 18};
let obj = {name: "Tom", age: 18, say: function() {console.log("Hello")}};
obj.name
/ obj["name"]
obj.name = "Jerry"
obj.hobby="swim"
delete obj.hobby
(了解)1 | for (let key in obj) { |
1 | Object.keys(obj).forEach(key => { |
1 | Object.values(obj).forEach(value => { |
1 | Object.entries(obj).forEach(([key, value]) => { |
foreach()是数组的方法,是用来遍历数组的,具体用法是:其中item是数组的元素,index是数组的索引。
1 | let arr = [1, 2, 3, 4, 5]; |
1 | Math.PI // 3.141592653589793 |
1 | let set = new Set([1, 2, 3, 4, 5]); // 通过数组创建 |
1 | set.forEach(value => { |
1 | let map = new Map([[1, "Tom"], [2, "Jerry"]]); // 通过数组创建 |
1 | map.forEach((value, key) => { |
引用数据类型:对象、数组、函数、Set、Map等。
简单数据类型放在栈内存,引用数据类型在栈内存中存储地址,堆内存中存储数据。
如果一个对象定义了一个叫[Symbol.iterator]的方法,那么这个对象就是一个迭代器。比如数组、字符串、Set、Map等。