1. 类型,值和变量
- book[“name”]可获取对象的某个属性;
- “two”>”three”会比较字符串在字母表中的索引大小;
- Date类日期的减法,计算时间间隔的毫秒数;
- 字符串转义符\:\n换行;\’撇号单引号;\”双引号;\f换页符;\反斜线;
- 字符串常用方法:
var s = "asdfgh";
var str = ”ABCABCABC”
charAt(pos),返回字符pos位字符串,不改变原字符串
s.charAt() //’a’,字符串s的第0位
s.charAt(3) //’f’,字符串s的第三位
substring(start,?end),返回字符串,不改变原字符串
s.substring(3) //’fgh’,字符串s的第三位到最后
s.substring(0,3) //’asd’,字符串s的第0到3(不包括3)位
slice(?start,?end),返回字符串,不改变原字符串
s.slice() //’asdfgh’,整个字符串
s.slice(3) //’fgh’,字符串s的第三位到最后
s.slice(0,3) //’asd’,字符串s的第0到3(不包括3)位
s.slice(0,-3) //’fgh’,字符串s从后往前第0到-3(不包括3)位
indexOf(string,?pos) / lastIndexOf(string,?pos),返回字符串首次/末次出现的位置数字,没有则返回-1
s.indexOf(‘a’) //0,字符串s中a首次出现的位置
‘asdaasfgh’.indexOf(‘s’,3) //5,从第3位开始s首次出现的位置,lastIndexOf不支持
split(sep,?limit),将字符串分割,返回分割成的字符串数组,不改变原字符串
str .split(“”) //["A", "B", "C", "A", "B", "C", "A", "B", "C"]
str .split(A) //["", "BC", "BC", "BC"]
str .split('B',2) //["A", "CA"],返回被B分割后的前两位数组
replace(str,replacer),替换某个字符串,返回新字符串,不改变原字符串
str.replace(‘ABC’,’abc’) //’abcABCABC’,返回将第一个ABC替换成abc的新字符串
str.replace(‘’,’abc’) //’abcABCABCABC’
str.replace(‘ ’,’abc’) //’ABCABCABC’
toUpperCase() / toLowerCase(),字符串大写/小写,返回新字符串,不改变原字符串
s.toUpperCase() //’ASDFGH’
s.toLowerCase() //’asdfgh’
includes(str,?pos),字符串中检测文本,返回true/false
s.includes('df') //true
s.includes('df',4) //false,第4位开始不包含df
startsWith(str,?pos),是否以某字符串开始
s.startsWith(‘as’) //true
s.startsWith(‘as’,4) //false,第4位是否以as开始
endsWith(str,?endpos),是否以某字符串结尾
s.endsWith(‘gh’) //true
s.endsWith(‘gh’,5) //false,第5位以前(不包括5)是否以gh结尾
- 字符串可当作只读数组,可用s[0]获取字符串中单个字符
false =='' //true
false == 0 //true
1==true //true
-1==true //false
false == -0 //true
//其他数字都不为true
NaN == false //false
null == false //false
undefined == false //false
null == undefined //true
typeof(null) //"object"
typeof(undefined) //"undefined"
var s=’asd’,n=1,b=true //字符串、数字、布尔值
var S=new String(s) //字符串对象,可添加属性和方法
var S1=String(n) //字符串
var N=new Number(n) //数字对象,可添加属性和方法
var B=new Boolean(b) //布尔值对象,可添加属性和方法
s、n、b和S、N、B运算==为true,运算===为false;S、N、B添加属性后,运算结果不变。typeof运算S、N、B为object类型
- Undefined、null、布尔、数字、字符串等原始值是不可改变的,只能返回一个新的值进行赋值,数组和函数等对象的值可修改。对象称为引用类型,对象的值都是引用,对象的比较均是引用的比较,两个对象即使完全一样也不相等,除非引用同一个基对象。
var o={x:1},p={x:1}
0===p //false
var a=[]
Var b=a
a===b //true
2. 语句
- 逻辑表达式&&
① 当操作数都是布尔值的时候,对两个值执行布尔与操作,当两个操作数都是true才返回true;
② 当操作数不一定是布尔值,可以对操作数的真值假值进行布尔与操作(假值:false、null、undefined、0、-0、NAN、””)。运算符首先计算左操作数的值,如果是假,整个表达式结果也为假,这时简单的返回左操作数的值,而并不会对右操作数进行计算。如果左操作数是真值,表达式的结果就依赖于右操作数的值,运算符计算右操作数的值并将其返回作为整个表达式的计算结果。
例如:
var json={str:[1,2]}
var len=json&&json.str&&json.str.length;//len=2
var num=json&&json.sss&&json.sss.length;//num=undefined
- switch语句
switch(expression){
case n:
//执行代码块1
break;
default:
//执行代码块2
break;
}
执行switch语句时,首先计算expression的值,然后查找与之相同的case表达式(按照‘===’比较)。找不到匹配的case会执行default代码块。如果没有break语句,会从匹配处依次执行后面的语句。
- 跳转语句
break是退出最内层的循环或switch语句
continue是终止本次循环的执行并开始下一次循环的执行
return让解释器跳出函数体的执行,并提供本次调用的返回值
throw语句触发或者“抛出”一个异常,他是与try/catch/finally语句一同使用的
3. 对象
- 对象可以看作是属性的无序集合,每个属性都是一个名/值对,除了字符串、数字、布尔、null、undefine之外的值都是对象。
- Object.keys(json),可以获得json对象属性名组成的数组。
- 用对象直接量创建对象:var point={x:0,y:0} 这个表达式每次执行都会创建并初始化一个新的对象。
- new关键字创建对象:var arr=new Array(); var ob=new Object();
- 每一个对象都从原型继承属性。
(1)通过对象直接量创建的对象都有同一个原型对象,可通过Object.prototype获得对原型对象的引用。
(2)通过关键字new和构造函数调用创建的对象的原型就是构造函数的prototype属性的值。
(3)所有的内置构造函数都具有一个继承自Object.prototype的原型。所以,new Date()创建的Date对象的属性同时继承自Date.prototype和Object.prototype。
这一系列链接的原型对象就是“原型链”。
4. 数组
- 数组的索引是基于零的32位数值:第一个元素索引为0,最大可能的索引为(232-2)。
var a = [1,2,3,4];
a.length=3; //a=[1,2,3]
- delete a[1];//a在索引1的位置不再有元素,也不为undefined
5. join();将数组中所有元素转化为字符串并连接再一起,返会生成的字符串。是字符串split()方法的逆向操作。
var a =[1,2,3];
a.join(); //1,2,3
a.join(“ “); //1 2 3
a.join(“”); //123
var b = new Array(5);
b.join(‘-’); //-----
- reverse()
var a =[1,2,3];
a.reverse().join(); //”3,2,1”,并且现在的a是[3,2,1]
- sort();
- concat();创建并返回一个新数组,但不会修改调用的数组。
var a =[1,2,3];
a.concat(4,5); //返回[1,2,3,4,5]
a.concat([4,5]); //返回[1,2,3,4,5]
a.concat(4,[5,[6,7]]); //返回[1,2,3,4,5,[6,7]]
- slice();和字符串slice方法相同
- splice();是在数组中插入或删除元素的通用方法,且会修改调用的数组;
- forEach()方法从头至尾遍历数组,为每个元素调用指定的函数,其可以有三个参数:数组元素、元素的索引和数组本身。
var data = [1,2,3,4,5];
var sum=0;
data.forEach(
function(v,i,a){a[i]=v+1;} //data=>[2,3,4,5,6]
)
forEach无法像for循环使用break语句终止遍历。需要将forEach()放在try块中,并抛出异常:
function foreach(a,f,t){
try{ a.forEach(f,t); }
catch(e){
if(e===foreach.break) return;
Else throw e;
}
}
foreach.break = new Error(stopIteration);
- map() 将调用的数组的每个元素传递给指定的函数,并返回一个数组,不修改调用的数组。
var a=[1,2,3];
var b=a.map(function(x){returnx*x}); //b=>[1,4,9]
- filter() 方法返回的数组元素是调用的数组的一个子集。传递的函数返回值为true或能转化为true的值,该元素就将加到一个作为返回值的数组中。
var a = [5,4,3,2,1];
var smalLValues = a.filter(function(x) { return x<3} ); //[2,1]
var e = a.filter(function(x,i) { return i%2==0} ); //[5,3,1] , i为索引
- every()和some() 。
(1)every()仅当数组中所有元素调用判定函数为true时才返回true
var a = [1,2,3,4,5];
a.every(function(x){ retrn x<10 }) //true;所有值<10
(2)some()当数组中至少有一个元素调用判定为true,它就返回true
a.some(function(x){ retrn x%2 === 0 }) //true;含有偶数
一旦every()和some()确认返回值就会停止遍历数组元素。
空数组调用every()返回true,调用some()返回false。
- 数组类型
Array.isArray([]) //true
Array.isArray({}) //false