typeof与instanceof都是判断数据类型的方法,区别如下:
- typeof会返回一个变量的基本类型,instanceof返回的是一个布尔值
- instanceof 可以准确地判断复杂引用数据类型,但是不能正确判断基础数据类型
- 而 typeof 也存在弊端,它虽然可以判断基础数据类型(null 除外),但是引用数据类型中,除了 function 类型以外,其他的也无法判断
对象遍历
使用Object.keys()遍历
返回一个数组,包括对象自身的(不含继承的)所有可枚举属性(不含Symbol属性).
const obj = {'0':'a','1':'b','2':'c'};
Object.keys(obj)
Object.values(obj)
// ['0', '1', '2']
// ['a', 'b', 'c']
使用for..in..遍历
循环遍历对象自身的和继承的可枚举属性(不含Symbol属性).
const obj = {'0':'a','1':'b','2':'c'};
for(var i in obj) {
console.log(i,":",obj[i]);
}
// 0 : a
// 1 : b
// 2 : c
使用Object.keys()遍历
返回一个数组,包括对象自身的(不含继承的)所有可枚举属性(不含Symbol属性).
Object.getOwnPropertyNames(obj)
返回一个数组,包含对象自身的所有属性(不含Symbol属性,但是包括不可枚举属性).
数组遍历
forEach遍历(可以同时访问数组的下标与元素值)
arr.forEach(function(item,index){
//index可要可不要
//item可以是对象
//item.name
});
for遍历(访问数组下标)
for (let i = 0; i < arr.length; ++i) {
console.log(arr[i]);
}
for…in…遍历(访问数组下标)
for(j in arr) {
//j表示的是index
}
for…of…遍历(访问元素值)
不仅支持数组,还支持大多数类数组对象,例如DOM NodeList对象。
也支持字符串遍历,它将字符串视为一系列的Unicode字符来进行遍历。
for(let value of arr) {
//打印出来的是值
});
// 可以遍历下标
for (const [i, v] of arr.entries()) {
console.log(i, v);
}
map遍历
对于运行传入的函数,返回一个新的数组
let mapResult = numbers.map((item, index, array) => item * 2);
every遍历
every()是对数组中的每一项运行给定函数,如果该函数对每一项返回true,则返回true。
var arr = [ 1, 2, 3, 4, 5, 6 ];
console.log( arr.every( function( item, index, array ){
return item > 3;
}));
// false
some遍历
some()是对数组中每一项运行指定函数,如果该函数对任一项返回true,则返回true。
var arr = [ 1, 2, 3, 4, 5, 6 ];
console.log( arr.some( function( item, index, array ){
return item > 3;
}));
// true
只有for/in不会忽略非数字属性