javascript常见知识点整理1
1.==和===
false==0;//true
false===0;//false
第一种是==比较,它会自动转换数据类型再比较;
第二种是===比较,它不会自动转换数据类型,如果数据类型不一致,返回false,如果一致,再比较。
2.NaN 与所有其他的值都不相等,包括它自己
NaN===NaN;//false
3.null表示一个空的值,它与0和空字符串都不同,0是一个数值,空字符串表示长度为0的字符串,而null表示为空。
undefined:表示值未定义
4 var声明的是局部变量,没有var则是全局变量
var a=3;//局部变量
a=3;//全局变量
5字符串是不可变的
var s="Test";
s[0]='X';
alert(s);//s仍然是Test
javascript为字符串提供了一些常用的方法,调用这些方法本身不会改变原有字符串的内容,而是返回一个新字符串
toUpperCase:把一个字符串全部变为大写
toLowerCase:把一个字符串全部变为小写
indexOf:会搜索指定字符串出现的位置
substring返回指定索引区间的子串
var s='hello,world';
s.substring(0,5);//从索引0开始到5(不包括5),返回'hello'
s.substring(7);//从索引7开始到结束,返回'world'
6 数组
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]
slice()对应的是string的substring()版本,它截取部分元素,然后返回一个新的Array,包括开始的索引,不包括结束的索引。
如果不传递任何参数,它就会从头到尾截取所有元素。
var arr = ['A', 'B', 'C', 'D', 'E', 'F', 'G'];
arr.slice(0, 3); // 从索引0开始,到索引3结束,但不包括索引3: ['A', 'B', 'C']
arr.slice(3); // 从索引3开始到结束: ['D', 'E', 'F', 'G']
push用来向array末尾添加若干元素,pop则把数组最后一个元素删除掉。空的数组pop不会报错,返回undefined
unshift用来给数组头部添加若干元素,shift用来把数组的第一个元素删除
var arr = [1, 2];
arr.unshift('A', 'B'); // 返回Array新的长度: 4
arr; // ['A', 'B', 1, 2]
arr.shift(); // 'A'
arr; // ['B', 1, 2]
sort会对当前数组进行排序,它会直接修改当前数组元素位置。
var arr = ['B', 'C', 'A'];
arr.sort();
arr; // ['A', 'B', 'C']
reverse实现数组翻转
var arr = ['one', 'two', 'three'];
arr.reverse();
arr; // ['three', 'two', 'one']
splice可以从指定索引开始删除若干元素,然后从该位置添加若干元素。
var arr = ['Microsoft', 'Apple', 'Yahoo', 'AOL', 'Excite', 'Oracle'];
// 从索引2开始删除3个元素,然后再添加两个元素:
arr.splice(2, 3, 'Google', 'Facebook');
arr; // ['Microsoft', 'Apple', 'Google', 'Facebook', 'Oracle']
// 只删除,不添加:
arr.splice(2, 2); // ['Google', 'Facebook']
arr; // ['Microsoft', 'Apple', 'Oracle']
// 只添加,不删除:
arr.splice(2, 0, 'Google', 'Facebook'); // 返回[],因为没有删除任何元素
arr; // ['Microsoft', 'Apple', 'Google', 'Facebook', 'Oracle']
concat方法把当前Array和另一个Array连接起来,并返回一个新的Array
var arr = ['A', 'B', 'C'];
var added = arr.concat([1, 2, 3]);
added; // ['A', 'B', 'C', 1, 2, 3]
arr; // ['A', 'B', 'C']
并没有改变原来的数组,而是返回了一个新的数组
concat()可以接收任意个元素和Array,并且自动把数组拆开,然后全部添加到新的数组里。
var arr = ['A', 'B', 'C'];
arr.concat(1, 2, [3, 4]); // ['A', 'B', 'C', 1, 2, 3, 4]
join()方法是一个非常实用的方法,它把当前数组的每个元素都用指定的字符串连接起来,然后返回连接后的字符串
var arr = ['A', 'B', 'C', 1, 2, 3];
arr.join('-'); // 'A-B-C-1-2-3'
7对象
用一个{ }表示对象
var xiaoming={
name:'xiaoming',
age:18,
height:180
};
xiaoming.name; // xiaoming
xiaoming.age; //18
属性名必须是一个有效的变量名。如果属性名包含特殊字符,必须用单引号括起来
var xiaohong={
name:'小红',
'middle-school':'no.1 middle school'
}
访问这个特殊的属性
xiaohong[‘middle-school’]; // ‘No.1 Middle School’
xiaohong[‘name’];// 小红
xiaohong.name; // 小红
xiaohong.age ; //不存在的属性不会报错,返回undefined
可以动态的添加属性和删除属性
var xiaoming = {
name: '小明'
};
xiaoming.age; // undefined
xiaoming.age = 18; // 新增一个age属性
xiaoming.age; // 18
delete xiaoming.age; // 删除age属性
xiaoming.age; // undefined
判断一个对象是否拥有某个属性:
‘name’ in xiaoming; // true
注意in判断的属性存在,这个属性不一定是xiaoming的,它可能是xiaoming继承到的。
'toString' in xiaoming;//true
因为toString定义在object对象中,而所有对象最终都会在原型链上指向object,所以xiaoming也有toString属性
判断一个属性是不是对象自身拥有的,而不是继承得到的,可以使用hasOwnProperty()方法
var xiaoming = {
name: '小明'
};
xiaoming.hasOwnProperty('name'); // true
xiaoming.hasOwnProperty('toString'); // false
8 判断和循环
JavaScript把null、undefined、0、NaN和空字符串”视为false,其他值一概视为true。
var s='123';
if(s.length){ alert('this is a string'); }
for …in…循环可以把一个对象所有属性依次循环出来
var o = {
name: 'Jack',
age: 20,
city: 'Beijing'
};
for (var key in o) {
alert(key); // 'name', 'age', 'city'
}
要过滤掉对象继承的属性,用hasOwnProperty()实现
var o={
name:'lwg',
city:'beijing'
};
for (var key in o){
if (o.hasOwnProperty(key)){
alert(key);//'name','city'
}
}
数组的遍历:
var a=['A','B','C'];
for (var i in a){
alert(i);//0 1 2 输出的是字符串
alert(a[i]); // A B C
}
注意for..in..对数组的循环得到的是String而不是Number
9 Map和Set
var m=new Map([
['zhansan',90],
['lisi' ,80] ,
['xiaoming',100]
]);
m.get('lisi');//80
初始化Map需要一个二维数组
var m = new Map(); // 空Map
m.set('Adam', 67); // 添加新的key-value
m.set('Bob', 59);
m.has('Adam'); // 是否存在key 'Adam': true
m.get('Adam'); // 67
m.delete('Adam'); // 删除key 'Adam'
m.get('Adam'); // undefined
由于一个key只能对应一个value,所以多次对一个key放入value,后面的值会把前面的值覆盖掉。
Set也是一组key的组合,但不存储value。由于key不能重复,所以在Set中,没有重复的key。
var s1 = new Set(); // 空Set
var s2 = new Set([1, 2, 3]); // 含1, 2, 3
重复的元素在Set中自动被过滤
var s = new Set([1, 2, 3, 3, '3']);
s; // Set { 1, 2, 3, "3"}
通过add(key)方法可以添加元素到Set中,可以重复添加,但是不会有效果。通过delete(key)方法可以删除元素。
var s = new Set([1, 2, 3]);
s; // Set { 1, 2, 3} s.delete(3);
s; // Set { 1, 2}
通过使用for ..of..遍历map和set
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
alert(x);
}
for (var x of s) { // 遍历Set
alert(x);
}
for (var x of m) { // 遍历Map
alert(x[0] + '=' + x[1]);
}
for..in..的遍历是对象属性名称。一个数组实际也是一个对象,它的每个元素的索引被视为一个属性。手动给数组添加额外的属性后,会出现一些问题
var a = ['A', 'B', 'C'];
a.name = 'Hello';
for (var x in a) {
alert(x); // '0', '1', '2', 'name'
}
for…in…循环把name包括在内,但Array的length属性却不包括在内。
for..of..循环则完全修复了这些问题,它只循环集合本身的元素
var a=['A','B','C'];
a.name='hello';
for(var x of a){
alert(x);// A B C
}
然而,更好的方式是直接使用iterable内置的forEach方法,它接收一个函数,每次迭代就自动回调该函数。
还没有评论,来说两句吧...