学习的教程地址如下:JavaScript 教程
根本语法
变量申明
- 变量无论在哪申明都会晋升到首行;
- 变量能够用
$
_
以及 任意的Unicode
字母,但不能是数字; - 一个 var 能够申明多个变量
var a, b = 1;
- 一行代码只有
;
时,示意空语句;;;;
这样就是 3 个空语句; - 如果变量申明没有赋值,值为
undefined
; - 区块
{}
并不会限度变量的作用域;
js 应用 html 的正文
上面是 html 的正文
<!-- html 正文 -->
js 也能够应用,比方
var x = 1; <!-- x=2;
--> x = 3;
留神:
- x 的值是 1;
-->
必须在行首,才会被当成单行正文,如果是写在代码两头,会可能被当成 — 运算符;
function countdown(n) {while (n --> 0) console.log(n);
}
countdown(3);
输入的是:2 1 0
while 这行被解释成 n-- > 0
条件判断
- 优先应用
===
而不是==
做条件比拟;
if (x = 2) { // 不报错,被当成赋值语句了
if (2 = x) {// 报错,这样能够防止被当成赋值语句
- if … else … 的构造倡议应用
{}
,否则 else 会主动与他最近的 ‘if’ 配对;
if (m !== 1) {if (n === 2) {console.log('hello');
}
} else {console.log('world');
}
// 输入的值是 world
switch
语句外部采纳的是“严格相等运算符”,不会产生成类型转换;
var x = 1;
switch (x) {
case true:
console.log('x 产生类型转换');
break;
default:
console.log('x 没有产生类型转换');
}
// x 没有产生类型转换
switch
与case
中都能够应用表达式
switch (1 + 3) {
case 2 + 2:
f();
break;
default:
neverHappens();}
for
能够不写表达式,但;
不能省略;
for (; ;){console.log('Hello World');
}
break
语句用于跳出代码块或循环。continue
语句用于立刻终止本轮循环,返回循环构造的头部,开始下一轮循环。- 如果存在多重循环,不带参数的
break
语句和continue
语句都只针对最内层循环。 label
标签通常与break
语句和continue
语句配合应用,跳出特定的循环。
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);
}
}
// i=0, j=0
// i=0, j=1
// i=0, j=2
// i=1, j=0
数据类型
分类
- 数值(number)、字符串(string)、布尔值 (boolean) 这三种类型,合称为原始类型
- 对象(object)是最简单的数据类型,又能够分成三个子类型。
- 广义的对象(object)
- 数组(array)
- 函数(function)
undefined
和null
,个别将它们看成两个非凡值。typeof
运算符能够返回一个值的数据类型。
typeof window // "object"
typeof {} // "object"
typeof [] // "object"
typeof null // "object",这个是历史起因造成的
typeof undefined
// "undefined"
function f() {}
typeof f
// "function"
typeof 123 // "number"
typeof '123' // "string"
typeof false // "boolean"
null
和 undefined
null
示意空值;undefined
示意“未定义”;
// 变量申明了,但没有赋值
var i;
i // undefined
// 调用函数时,应该提供的参数没有提供,该参数等于 undefined
function f(x) {return x;}
f() // undefined
// 对象没有赋值的属性
var o = new Object();
o.p // undefined
// 函数没有返回值时,默认返回 undefined
function f() {}
f() // undefined
布尔值
- 布尔值转换规则是除了上面六个值被转为
false
,其余值都视为true
。
undefined
null
false
0
NaN
""
或''
(空字符串)
空数组(
[]
)和空对象({}
)对应的布尔值,都是true
数值
- 所有数字都是以 64 位浮点数模式贮存,所有数字都是小数(64 位浮点数)。某些运算只有整数能力实现时,会主动把 64 位浮点数,转成 32 位整数,而后再进行运算;
1 === 1.0 // true
- 浮点数不是准确的值
0.1 + 0.2 === 0.3
// false
0.3 / 0.1
// 2.9999999999999996
(0.3 - 0.2) === (0.2 - 0.1)
// false
- 浮点数的 64 个二进制位,从最右边开始,是这样组成的。
- 第 1 位:符号位,
0
示意负数,1
示意正数 - 第 2 位到第 12 位(共 11 位):指数局部
- 第 13 位到第 64 位(共 52 位):小数局部(即有效数字
- 数值的精度 -2^53 到 2^53
- 数值范畴 2^1024 到 2^-1023
- Number 对象的 MAX_VALUE 和 MIN_VALUE 属性,返回能够示意的具体的最大值和最小值。
Number.MAX_VALUE // 1.7976931348623157e+308
Number.MIN_VALUE // 5e-324
- 数值能够用字面量(十进制、十六进制、八进制、二进制),也能够用迷信计数法
- 十进制:没有前导 0 的数值。
- 八进制:有前缀
0o
或0O
的数值,或者有前导 0、且只用到 0 - 7 的八个阿拉伯数字的数值。 - 十六进制:有前缀
0x
或0X
的数值。 - 二进制:有前缀
0b
或0B
的数值。
- JavaScript 会主动将数值转为迷信计数法(小数点前的数字多于 21 位。,小数点后的零多于 5 个。)示意,其余状况都采纳字面模式间接示意。
- 简直所有场合,正零和负零都会被当作失常的
0
。惟一有区别的场合是,+0
或-0
当作分母,返回的值是不相等的。
(1 / +0) === (1 / -0) // false
下面的代码之所以呈现这样后果,是因为除以正零失去+Infinity
,除以负零失去-Infinity
,这两者是不相等的
NaN
NaN
是 JavaScript 的非凡值,示意“非数字”0
除以0
也会失去NaN
。
0 / 0 // NaN
NaN
不是独立的数据类型,而是一个非凡数值
typeof NaN // 'number'
NaN
不等于任何值,包含它自身。
NaN === NaN // false
- 数组的
indexOf
办法外部应用的是严格相等运算符,所以该办法对NaN
不成立。
[NaN].indexOf(NaN) // -1
NaN
在布尔运算时被当作false
。
Boolean(NaN) // false
NaN
与任何数(包含它本人)的运算,失去的都是NaN
。
NaN + 32 // NaN
NaN - 32 // NaN
NaN * 32 // NaN
NaN / 32 // NaN
Infinity
// 场景一
Math.pow(2, 1024) // Infinity,超过最大值,或小于最小值
// 场景二
0 / 0 // NaN
1 / 0 // Infinity,非 0 除 0
Infinity === -Infinity // false,有正负之分
1 / -0 // -Infinity
-1 / -0 // Infinity
Infinity > 1000 // true,正无穷大于任何值
-Infinity < -1000 // true,负无穷小于任何值
Infinity
与 NaN
比拟,总是返回false
。
Infinity > NaN // false
-Infinity > NaN // false
Infinity < NaN // false
-Infinity < NaN // false
运算规定
5 * Infinity // Infinity
5 - Infinity // -Infinity
Infinity / 5 // Infinity
5 / Infinity // 0
0 乘以 Infinity
,返回NaN
;0 除以Infinity
,返回0
;Infinity
除以 0,返回Infinity
。
0 * Infinity // NaN
0 / Infinity // 0
Infinity / 0 // Infinity
Infinity
加上或乘以Infinity
,返回的还是Infinity
。
Infinity + Infinity // Infinity
Infinity * Infinity // Infinity
Infinity
减去或除以Infinity
,失去NaN
。
Infinity - Infinity // NaN
Infinity / Infinity // NaN
Infinity
与 null
计算时,null
会转成 0,等同于与 0
的计算。
null * Infinity // NaN
null / Infinity // 0
Infinity / null // Infinity
Infinity
与 undefined
计算,返回的都是NaN
。
undefined + Infinity // NaN
undefined - Infinity // NaN
undefined * Infinity // NaN
undefined / Infinity // NaN
Infinity / undefined // NaN