背景
DOM一个与系统平台和编程语言无关的接口
- W3C批准的另一项技术,所有与标准相兼容的web浏览器都支持它,这就是DOM(文档对象模型)我们可以利用DOM给文档加入交互能力,JavaScript就是使网页具有交互能来的语言
- JavaScript是一种脚本语言,只能通过浏览器完成操作
- 早期网景公司在JavaScript早期版本中加入了实验性的DOM,称为第0级DOM
- 之后浏览器混战导致多种浏览器使用的DOM不兼容
- w3c在之后为DOM制定标准,成为第1级DOM
- 重点就是如何用JavaScript使用DOM
JavaScript基本概念
- JavaScript必须通过HTML文档才能执行有两种方式可以做到。第一种代码写入head标签中的script标签,第二种放到一个扩展名为.js的独立文件中
- js需要解释器(与编译器对应)错误只能等到执行时才发现,一般浏览器负责解释和执行
- 语句:JavaScript 程序的执行单位为行,也就是一行一行地执行。一般情况下,每一行就是一个语句,最好加分号
- 注释://和/* */
语句和表达式,值和函数值
var a = 1 + 3;
- 以上为一条语句,语句的值为undefined
- 1+3叫做表达式,指一个为了得到值的计算式。
- 语句和表达式的区别在于,前者主要为了进行某种操作,一般情况下不产生值;后者则是为了得到值,一定会产生一个值。
- 只有函数有返回值,add(1,2)的值为函数的返回值
- 值和返回值区别:console.log值就是函数本身(没有参数)函数是对象所以返回本身,console.log(3)值就是这个函数的返回值为undefined,但是会打印一个3

- js对大小写敏感,对空格回城不敏感,但是return后面不能加回车
标识符
标识符指的是用来识别各种值的合法名称。最常见的标识符就是变量名,以及后面要提到的函数名。
- 第一个字母可以是Unicode的字母(包括英文字母和其他语言的字母)以及美元符号($)和下划线(_)。
- 第二个字符及后面的字符,除了 Unicode 字母、美元符号和下划线,还可以用数字0-9。
变量
- 变量是对“值”的具名引用。变量就是为“值”起名,然后引用这个名字,就等同于引用这个值。变量的名字就是变量名。
- 如果只是声明变量而没有赋值,则该变量的值是undefined。undefined是一个特殊的值,表示“无定义”。
区块
- JavaScript 使用大括号,将多个相关的语句组合在一起,称为“区块”(block)。
- 对于var命令来说,JavaScript 的区块不构成单独的作用域(scope)。
条件语句
if(condition){
statements;
}
- 条件求值结果永远是布尔值
- 如果只有一句statement那么不用花括号
- if else语句
- 除以下几个之外,其他一律为true,1:0 2:undified 3:字符串"" 4:null 5:NaN 6:false
- switch 结构,每个case代码块内部的break语句不能少,否则会接下去执行下一个case代码块,而不是跳出switch结构。如果所有case都不符合,则执行最后的default部分。
- 三元条件(条件) ? 表达式1 : 表达式2
&&逻辑短路
- A&&B&&C&&D取第一个假(布尔值判断真假)值或D,并不会取布尔值true或false,布尔值在这只是用来判断真假,把A运算成布尔值来判断
- 1&&2 数字1的布尔值为真,所1&&2值为2
- 0&&2 数字0的布尔值为假,所以0&&值为0
- ||逻辑短路同理,A||B||C||D取第一个真值或D,并不会取true|false
- 常用于a = a||100,如果变量a存在,变量a就为第一个真值,如果a不存在,那么第一个a不是真值,就执行最后一句a=100。给a一个保底值。
- &&和||求的是布尔值返回的是值
循环
- while循环
while (条件) {
语句;
}
- chrome浏览器控制台会莫名其妙返回值忽略就行
- do while循环,区别在于执行一次
- for循环,先执行初始化表达式,再判断表达式的真假如果为真,就执行循环体语句,然后执行递增表达式,如果为假就直接退出循环
for(var i=0;i<3;i++){
setTimeout(()=>{
console.log(i)
},0)
}
//3个3
i=0满足i<3,所以执行循环体打出i,但要过一会。
以此类推
i=1满足i<3,所以执行循环体打出i,但要过一会。
i=2满足i<3,所以执行循环体打出i,但要过一会。
i=3不满足i<3,结束循环。
for循环不结束,就不算过一会!
现在循环结束了,过一会了,终于要打出i了,而且还要打出三次,因为此时i=3了。所以打出了3个3
break和continue
- break语句用于跳出代码块或循环。
- continue语句用于立即终止本轮循环,返回循环结构的头部,开始下一轮循环。
lable标签
- 语句的前面有标签(label),相当于定位符,用于跳转到程序的任意位置
- 标签可以是任意的标识符,但不能是保留字,语句部分可以是任意语句。
- 标签通常与break语句和continue语句配合使用,跳出特定的循环。
- 下面代码为一个双重循环区块,break命令后面加上了top标签,满足条件时,直接跳出双层循环。如果break语句后面不使用标签,则只能跳出内层循环,进入下一次的外层循环。
top:
for (var i = 0; i < 3; i++){
for (var j = 0; j < 3; j++){
if (i === 1 && j === 1) break top;
console.log('i=' + i + ', j=' + j);
}
}
- 标签也可以用于跳出代码块。
foo: {
console.log(1);
break foo;
console.log('本行不会输出');
}
console.log(2);
- 以下代码表示一个代码块里有一个标签,标签里面有一条语句1,和直接在控制台输入1,没有区别
{
foo:1;
}

其他
- 浏览器的console,返回的是值