JavaScript权威指南(第二章、第三章)

1、区分大小写

在js中是有大小写区别的,而在html中没有大小写之分。

如:在设置时间处理程序时,html中可将onClick写成onclick,而在js中只能写成onClick。

2、数字
(1)不区分浮点数值和整数值

​ js中所有数字均用浮点数值表示。

(2)八进制

​ ES6中八进制直接量是明令禁止的。

(3)浮点数直接量

​ 3.14

​ .3333333

​ 6.02e23/6.02E23 //6.02×10^23

(4)算术运算

​ -infinity(负无穷大)

​ NaN()(判断是否为数字)

​ 0.3-0.2 !== 0.2-0.1 (0.3-0.2=0.09999999999998)

(5)日期和时间

3、文本

js中没有表示单个字符的“字符型”。

(1)字符串直接量

​ 在ES5中字符串直接量可以拆分成数行,每行以反斜线 \ 结束

\也可用来转义。

(2)字符串的使用

正则表达式(RegExp)的相关函数

1
2
3
4
5
6
7
var text = 'testing: 1, 2, 3';
var pattern = /\d+/g //g表示在全局下匹配
pattern.test(text); //=>true,检测是否匹配
text.search(pattern); //首次匹配成功的位置
text.match(pattern); //=>['1','2','3']所有匹配组成的数组
text.replace(pattern, '#'); //=>testing:#,#,#
text.split(/\d+/);
4、null & undefined

undefined表示系统级的、出乎意料的或类似错误的值的空缺,而null是表示程序及的、正常的或意料之中的值的空缺。

如果想将他们复制给变量或者属性,或将它们作为参数传入函数,最佳选择是使用null。

5、不可变的原始值和可变的对象引用

原始值:undefined、null、布尔值、数字、字符串

对象:数组、函数

(1)原始值不可更改:任何方法都无法更改一个原始值。

例:

1
2
3
var s = 'hello';
s.toUpperCase(); //返回'HELLO',但并没有改变s的值
s; //=>'hello':原始字符串的值并未改变

原始值的比较是值的比较。

(2)对象是可变的——它们的值是可修改的
1
2
3
4
var o = {x:1};
o.x = 2; //可改变对象值
o.y = 3; //可增加一个新属性
数组也具有相同的属性

对象的比较并非值的比较,两个包含相同属性及相同值的对象,他们也是不相等的。各个索引元素完全相等的两个数组也不相等。当且仅当他们引用同一个基对象时,它们才相等。

例:

1
2
3
4
5
var a = [];
var b = a;
b[0] = 1;
a[0] //=>1:变量a的值也会修改
a ==== b //=>true

如果想得到一个对象或数组的副本,则必须显示复制对象的每一个属性或数组的每一个元素。例:

1
2
3
4
5
var a = ['a', 'b', 'c'];
var b = [];
for (var i = 0; i < a.length; i++) {
b[i] = a[i];
}
6、显示类型转换
1
2
3
4
5
6
var n = 123456.789;
n.toFixed(0); //'123457' 根据小数点后的指定位数将数字转换为字符串,四舍五入
n.toFixed(2); //'123456.79' 同上,四舍五入
n.toFixed(5); //'123456.78900' 填充0
n.toExponential(1); //