script
标签
可以通过内联和外联的方式引入脚本,当引入外部脚本后,当前标签内联的脚本就不会执行
属性
async
:立即下载脚本,但不阻塞页面渲染,脚本下载完毕之后立即执行,不能保证脚本按照顺序执行charset
:指定脚本的编码字符集defer
:脚本延迟到页面完全解析后依次执行脚本language
:脚本语言,已废弃src
:脚本url
type
:脚本语言类型(也称为MIME
类型),外联脚本可不填,可以为text/ecmascript
和text/javascript
,默认为text/javascript
javascript
基本语法
标识符
- 必须以字母、下划线、或美元符号开头
- 其它字符可以为字母、下划线、美元符号或数字等字符
严格模式(ECMAScrpit5
引入)
- 通过
"use strict;"
启用严格模式 - 本质是一个编译指示,告诉引擎切换到严格模式
- 严格模式下,
ECMAScrpit3
一些不确定行为会抛出异常
数据类型
基本的数据类型(简单数据类型)有 5 种:undefined
、null
、boolean
、number
、string
,复杂数据类型object
typeof
操作符null
或者对象都返回object
Boolean
类型转化
数据类型 | 转化为true 的值 |
转化为false 的值 |
---|---|---|
string | 任何非空值 | “” |
number | 任何非 0 数值(包括无穷大) | 0 和 NaN |
object | 任何对象 | null |
undefined | undefined |
number
类型- 八进制用
0
开头,16 进制用0x
开头 - 科学计数法
3e5
表示 300000 - 数值转化
true
转化为 1,false
转化为 0undefined
转化为NaN
- 八进制用
string
类型toString
方法,参数可选基数 2、8、10、16,默认为 10 进制String
方法- 若存在
toString
方法,则调用toString
方法转化为 10 进制字符串 - 若为
null
,则返回"null"
- 若为
undefined
,则返回"undefined"
- 若存在
object
对象constructor
:创建对象的函数hasOwnProperty
:属性是否存在于当前对象而不是原型链中isPropertyOf
:检查传入对象是否为当前对象的原型propertyIsEnumerable
:检查属性是否可以用for-in
枚举toLocaleString
:返回对象的字符串表示toString
:返回对象的字符串表示valueOf
:返回对象的字符串、数值或布尔值表示,通常于toString
相同
操作符
位操作符
~
按位非&
按位与|
按位或^
按位异或>>
有符号右移<<
有符号左移>>>
无符号右移
相等操作符
- 相等(==)和不相等(!=),强制转化数据类型后再比较
- 全等(===)和全不等(!==),不转化数据类型直接比较
逗号操作符
- 一条语句执行多个操作
- 赋值时返回表达式的最后一项
语句
for - in
语句循环,没有顺序,null
和undefined
会抛出异常label
语句,在代码中添加标签,和break
及continue
配合使用1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27// 存在lable标签
let count = 0;
for (let i = 0; i < 10; i++) {
outermost: for (let j = 0; j < 10; j++) {
for (let k = 0; k < 10; k++) {
if (i >= 5 && k >= 5) {
break outermost;
}
count++;
}
}
}
console.log(count); // 525
// 不存在lable标签
let count = 0;
for (let i = 0; i < 10; i++) {
for (let j = 0; j < 10; j++) {
for (let k = 0; k < 10; k++) {
if (i >= 5 && k >= 5) {
break;
}
count++;
}
}
}
console.log(count); // 750with
语句限定作用域在局部对象中,若在局部变量中找不到定义,则在
with
对象中查找对应的属性1
2
3
4with (location) {
console.log(pathname); // location.pathname
console.log(this); // window
}with
造成性能下降及调试困难,建议少用
函数
arguments
参数类似数组,可通过下标形式访问参数,通过 length 属性获取传入参数个数
arguments
值与对应参数值同步,但不是共用一块内存,而是值的复制1
2
3
4
5function doAdd(num1, num2) {
arguments[1] = 10;
return arguments[0] + num2;
}
console.log(doAdd(1, 2)); // 11
没有签名,因为参数是由包含 0 个或者多个值的数组实现的
没有重载,后定义的函数覆盖之前定义的函数