JavaScript 快速入门
数据类型
Number
:不区分整数与浮点数。- 字符串: 以单引号或双引号括起来的任意文本。
- 布尔值:
true
和false
。 - 比较运算符:
==
会自动转换数据类型再比较;===
不转换数据类型,如果数据类型不一致,返回false
。 null
和undefined
:null
表示空,undefined
表示未定义。- 数组:可以包含任意数据类型,
new Array(1,2,3)
这种创建方法不推荐,可以通过索引访问。 - 对象:键-值组成的无序集合。键是字符串类型,值可以是任意类型。每个键又称为对象的
属性
,对象变量.属性
。 null、undefined、0、NaN
和空字符串''
视为false
,其他值一概视为true
。
变量:可以以$开头。变量本身类型不固定,是动态语言。
console.log(x)
在控制台打印。不用var
声明的变量是全局变量,use strict
可以进行检查。NaN; //Not a Number Infinity; //无限大 10%3=1; //对小数也是这样10.5%3=1.5; flase==0;//true flase===0;//false var arr=[1,1.35,'1abc',true]; var person={name:'Bob'}; person.name; //'Bob'
字符串
'
也是字符时,是""
括起来,或者使用转义字符\
转义。- 多行字符串:反引号 * ... * 。
- 字符串拼接:"+",或者${name},会自动替换字符串中的变量。
字符串操作:
var s="Hello,world!" s.length;//13 s[0]=H; //由于字符串不可变,对字符串索引赋值,不会出错,但不改变原内容 s[0]="X";//"X" s[0];//"H" s.toUpperCase(); s.toLowerCase(); s.indexOf();//搜索字符串出现位置,没有返回-1 s.substring();//返回索引区间的子串
数组
可以包含任意数据类型,并通过索引来访问每个元素。var arr=[1,2,3.14,"hello",true,null]; arr.length; //6 //可以对length重新赋值,将直接导致array大小的变化,若超出则多出的值为undefined,小于则截短 arr[1]=99; arr.indexOf(99); //指定元素位置 arr.slice(0,3); //截取array部分元素,返回新的,即使是完全复制的也不同 arr.push("a","b"); //末尾添加若干元素 arr.pop(); //最后一个元素删除掉,空数组返回undefined arr.unshift("A","B"); //头部添加元素 arr.shift(); //删除第一个元素,为空时返回undefined arr.sort(); //排序 arr.reverse(); //反转 arr.splice(2,3,"Google","Facebook"); //从指定位置开始删除若干元素,然后从该位置添加元素,返回删除的元素 arr.concat([1,2,3]); //将当前array和另一个array连接起来,并返回一个新的array arr.join("-");// 用指定字符串连接每个元素并返回字符串
对象
var xiaohong = { name: '小红', 'middle-school': 'No.1 Middle School' }; xiaohong['middle-school']; // 'No.1 Middle School','middle-school'不是一个有效变量 xiaohong['name']; // '小红' xiaohong.name; // '小红' //未定义的字段返回undefined xiaoming.age = 18; // 新增一个age属性 delete xiaoming.age; // 删除age属性 delete xiaoming['name']; // 删除name属性,不存在也不会报错 //检测属性 'name' in xiaoming; // true,此属性可能由继承而来 xiaoming.hasOwnProperty('name'); // true
循环
var a = ['A', 'B', 'C']; for (var i in a) { console.log(i); // '0', '1', '2' 返回String类型 console.log(a[i]); // 'A', 'B', 'C' }
Map和Set
var m = new Map([['Michael', 95], ['Bob', 75], ['Tracy', 85]]); m.get('Michael'); // 95 m.set('Adam', 67); // 添加新的key-value m.has('Adam'); // 是否存在key 'Adam': true m.delete('Adam'); // 删除key 'Adam' //Set var s2 = new Set([1, 2, 3]); // 含1, 2, 3 s.delete(3); s.add(4);
Iterator
for ... in循环由于历史遗留问题,它遍历的实际上是对象的属性名称。一个Array数组实际上也是一个对象,它的每个元素的索引被视为一个属性。var a = ['A', 'B', 'C']; var s = new Set(['A', 'B', 'C']); var m = new Map([[1, 'x'], [2, 'y'], [3, 'z']]); for (var x of a) { // 遍历Array console.log(x); } for (var x of s) { // 遍历Set console.log(x); } for (var x of m) { // 遍历Map console.log(x[0] + '=' + x[1]); }
forEach方式:
var s = new Set(['A', 'B', 'C']); s.forEach(function (element, sameElement, set) { console.log(element); }); var m = new Map([[1, 'x'], [2, 'y'], [3, 'z']]); m.forEach(function (value, key, map) { console.log(value); }); var a = ['A', 'B', 'C']; //可以只传入element等自己想查看的 a.forEach(function (element, index, array) { // element: 指向当前元素的值 // index: 指向当前索引 // array: 指向Array对象本身 console.log(element + ', index = ' + index); });