JavaScript代码可以直接嵌在网页的任何地方
==
会自动转换数据类型再比较,很多时候,会得到非常诡异的结果;===
它不会自动转换数据类型,如果数据类型不一致,返回false,如果一致,再比较。由于JavaScript这个设计缺陷,始终坚持使用===
比较。
NaN这个特殊的Number与所有其他值都不相等,包括它自己:
NaN === NaN; // false
唯一能判断NaN的方法是通过isNaN()函数:isNaN(NaN); // true
浮点数在运算过程中会产生误差,因为计算机无法精确表示无限循环小数。要比较两个浮点数是否相等,只能计算它们之差的绝对值,看是否小于某个阈值:
Math.abs(1 / 3 - (1 - 2 / 3)) < 0.0000001; // true
JavaScript的数组可以包括任意数据类型,例如:
[1, 2, 3.14, 'Hello', null, true];
另一种创建数组的方法是通过Array()函数实现:new Array(1, 2, 3); // 创建了数组[1, 2, 3]
JavaScript定义了四种原始数据类型,除此之外,Javascript中的一切都是对象(object),string,number,boolean,undefined
JavaScript的对象
JavaScript的对象是一组由键-值组成的无序集合,键都是字符串类型,值可以是任意数据类型
var person = {
name: 'Bob',
age: 20,
tags: ['js', 'web', 'mobile'],
city: 'Beijing',
hasCar: true,
zipcode: null
};
JavaScript变量名是大小写英文、数字、$和_的组合,且不能用数字开头
用反引号 表示多行字符串,反引号在键盘的ESC下方,数字键1的左边
`这是一个
多行
字符串`;
用+号把多个字符串连接起来
字符串常见的操作:
var s = 'Hello, world!';
s.length; // 13
//获取字符串某个指定位置的字符
s[0]; // 'H'
s[6]; // ' '
s[7]; // 'w'
s[12]; // '!'
s[13]; // undefined 超出范围的索引不会报错,但一律返回undefined
s.toUpperCase();
s.toLowerCase();
//indexOf()会搜索指定字符串出现的位置
var s = 'hello, world';
s.indexOf('world'); // 返回7
s.indexOf('World'); // 没有找到指定的子串,返回-1
//返回指定索引区间的子串
var s = 'hello, world'
s.substring(0, 5); // 从索引0开始到5(不包括5),返回'hello'
s.substring(7); // 从索引7开始到结束,返回'world'
字符串是不可变的,如果对字符串的某个索引赋值,不会有任何错误,但是,也没有任何效果
直接给Array的length赋一个新的值会导致Array大小的变化
var arr = [1, 2, 3];
arr.length; // 3
arr.length = 6;
arr; // arr变为[1, 2, 3, undefined, undefined, undefined]
arr.length = 2;
arr; // arr变为[1, 2]
如果通过索引赋值时,索引超过了范围,同样会引起Array大小的变化
var arr = [1, 2, 3];
arr[5] = 'x';
arr; // arr变为[1, 2, 3, undefined, undefined, 'x']
indexOf
slice
push
pop
unshift
shift
sort
reverse
splice
concat
join
JavaScript把
null
、undefined
、0
、NaN
和空字符串''
视为false
,其他值一概视为true
关键字arguments
rest参数