JavaScript内置对象

903 阅读2分钟

这篇是自己阅读你不知道的js上篇关于对象的📒。

1.内置对象:

String、Number、Boolean、Object、Function、Array、Date、RegExp、Error。实际上这些是一些内置函数,这些内置函数可以当做构造函数来使用,从而创建一个对应子类型的新对象。

var strP = "i am iverson";

typeof strP; //"string"

strP instanceof String; //false



var strObj = new String("我是海贼猎人索隆");

typeof strObj ;//Object


strObj instanceof String; // true;


2.[]和.对象的访问:

  • .属性访问:要求属性名满足标识符命名规范。

  • []键访问:可以接受任意的utf-8/Unicode字符串作为属性名。

如果要使用Super-man的属性,就必须使用["Super-man"],因为Super-man并不是一个幼小的标识符属性名。

对象中的属性名永远都是字符串

3.检测存在:

下面是一个检测对象中是否存在某个属性的方法

var myObj={
	name:"李白打野换酒钱"
};
console.log("name" in myObj);
//true;

console.log("age" in myObj);
//false;

myObj.hasOwnProperty("name");
//true

myObj.hasOwnProperty("age");
//false;

for(var k in myObj){
	console.log("k",k,myObj[k])
}
//k name 李白打野换酒钱

Object.keys(myObj);
//["name"]

Object.getOwnPropertyNames(myObj);
//["name"]
  • in操作符:in操作符会检查属性是否在对象以及prototype原型链上。
  • hasOwnProperty:只会检查属性是否在myObj对象上,不会检查原型链。
  • Object.keys():会返回一个数组,包含所有可枚举属性
  • Object.getOwnPropertyNames():会返回一个包含所有属性的数组,无论是否可枚举。

4.for...of遍历

for...of循环首先会向被访问的对象请求一个迭代器对象,然后通过迭代器对象的next()方法来遍历所有返回值。

//for of 循环
var myArr = [1,2,3];
for(var v of myArr){
  console.log(v);
}
//1,2,3


//迭代器对象
var myArr1 = [1,2,3];
var it = myArr1[Symbol.iterator]();
it.next();//{value:1,done:false};
it.next();//{value:2,done:false};
it.next();//{value:3,done:false};
it.next();//{done:true};

//书中对象使用迭代器的例子

var myObject={
	a:2,
  b:3
}

Object.defineProperty(myObject,Symbol.iterator,{
  enumerable:false,
  writable:false,
  configurable:true,
  value:function(){
    var o = this;
    var idx = 0;
    var ks = Object.keys(o);
    return {
      next:function(){
        return {
          value:o[ks[idx++]],
          done:(idx > ks.length)
        }
      }
    }
  }
});

var it = myObject[Symbol.iterator]();
it.next();//{value:2,done:false};
it.next();//{value:3,done:false};
it.next();//{done:true};

for(var t of myObject){
  console.log(t);
};
//2,3