typeof与instanceof都是判断数据类型的方法,区别如下:

  • typeof会返回一个变量的基本类型,instanceof返回的是一个布尔值
  • instanceof 可以准确地判断复杂引用数据类型,但是不能正确判断基础数据类型
  • 而 typeof 也存在弊端,它虽然可以判断基础数据类型(null 除外),但是引用数据类型中,除了 function 类型以外,其他的也无法判断

    对象遍历

    使用Object.keys()遍历

返回一个数组,包括对象自身的(不含继承的)所有可枚举属性(不含Symbol属性).

  1. const obj = {'0':'a','1':'b','2':'c'};
  2. Object.keys(obj)
  3. Object.values(obj)
  4. // ['0', '1', '2']
  5. // ['a', 'b', 'c']

使用for..in..遍历

循环遍历对象自身的和继承的可枚举属性(不含Symbol属性).

  1. const obj = {'0':'a','1':'b','2':'c'};
  2. for(var i in obj) {
  3. console.log(i,":",obj[i]);
  4. }
  5. // 0 : a
  6. // 1 : b
  7. // 2 : c

使用Object.keys()遍历

返回一个数组,包括对象自身的(不含继承的)所有可枚举属性(不含Symbol属性).

Object.getOwnPropertyNames(obj)

返回一个数组,包含对象自身的所有属性(不含Symbol属性,但是包括不可枚举属性).

数组遍历

forEach遍历(可以同时访问数组的下标与元素值)

  1. arr.forEach(function(item,index){
  2. //index可要可不要
  3. //item可以是对象
  4. //item.name
  5. });

for遍历(访问数组下标)

  1. for (let i = 0; i < arr.length; ++i) {
  2. console.log(arr[i]);
  3. }

for…in…遍历(访问数组下标)

  1. for(j in arr) {
  2. //j表示的是index
  3. }

for…of…遍历(访问元素值)

不仅支持数组,还支持大多数类数组对象,例如DOM NodeList对象。

也支持字符串遍历,它将字符串视为一系列的Unicode字符来进行遍历。

  1. for(let value of arr) {
  2. //打印出来的是值
  3. });
  1. // 可以遍历下标
  2. for (const [i, v] of arr.entries()) {
  3. console.log(i, v);
  4. }

map遍历

对于运行传入的函数,返回一个新的数组

  1. let mapResult = numbers.map((item, index, array) => item * 2);

every遍历

every()是对数组中的每一项运行给定函数,如果该函数对每一项返回true,则返回true。

  1. var arr = [ 1, 2, 3, 4, 5, 6 ];
  2. console.log( arr.every( function( item, index, array ){
  3. return item > 3;
  4. }));
  5. // false

some遍历

some()是对数组中每一项运行指定函数,如果该函数对任一项返回true,则返回true。

  1. var arr = [ 1, 2, 3, 4, 5, 6 ];
  2. console.log( arr.some( function( item, index, array ){
  3. return item > 3;
  4. }));
  5. // true

只有for/in不会忽略非数字属性