Swift51.com
麦子学院 头像
麦子学院  2017-02-27 18:30

Javascript学习之内置对象Object详解

回复:0  查看:2199  
JavaScript的简单数据类型包括:Undefined、Null、Boolean、Number、String。JavaScript中这五种基本数据类型不是对象,其他所有值都是对象。其中还有一些对象子类型,通常被称为内置对象(引用类型),一起来看看吧,希望对大家 学习javascript 有所帮助。
  1、Object
  2、Array
  3、Date
  4、RegExp
  5、Function
  6、Boolean
  7、Number
  8、String
   创建对象的三种方法
  创建对象有三种方法:
  1、对象字面量,即用{}生成,一个对象字面量就是包围在一对花括号中的零个或多个“名/值”对
  2、构造函数,利用Object()构造函数生成
  3、Object().create方法生成
  注意:推荐第一种写法,第三种方法多用在继承的场合
  var myobj = {
  key : value;
  }
  var myobj = new Object()
  myobj.key = value;
  var myobj = Object.create(Object.prototype);
  myobj.key = value;
   引用
  对象通过引用来传递,它们永远不会被复制。简单来说就是多个变量指向同一个对象,那么他们都是这个对象的引用,多个变量它们都指向同一个内存地址,如果通过一个变量修改了指向的对象,那么所有指向这个对象的变量都会发生改变
  var o = {
  name : 'laowang'
  };
  var b = o;
  b.name = 'liu';
  console.log(o.name); //liu
   属性操作
  读取属性
  读取对象的属性有两种方法,一种是用点运算符,另一种是用方括号运算符
  var o = {
  name : 'laowang'
  };
  o.name; //'laowang'
  o['name']; //'laowang'
  注意:点操作符要求属性名满足标示符的命名规范,而方括号运算符的方式可以接受任何字符串作为属性名
  例如:
  var o = {
  name : 'laowang',
  'super-f' : 2
  };
  console.log(o.super-f); //报错
  console.log(o['super-f']); //2
  可以在方括号中括住一个字符串表达式的方式来访问属性
  var o = {
  name1 : 'laowang',
  name2 : 'liaomou',
  name3 : 'PDD'
  };
  for(var i=1;i<4;i++){
  console.log(o['name'+i]);//laowang liaomou PDD
  };
  在对象中,属性名永远都是字符串,如果你使用String以外的其他值作为属性名,那他首先会被转换为一个字符串。即使是数字也不例外
  var myObject = {};
  myObject[true] = 'foo';
  myObject[2] = 't';
  myObject['true']; //"foo"
  myObject['2']; //"t"
  写入属性
  可以用点运算符和方括号运算符写入属性
  var myObject = {
  name : 'laowang'
  };
  //两种方法的效果是一样的
  var myObject = {};
  myObject.name = 'laowang';
  myObject[name] = 'laowang';
  查看属性
  可以使用Object.keys()方法
  var myObject = {
  name : 'laowang',
  address : '西青区'
  };
  console.log(Object.keys(myObject)); //["name", "address"]
  删除属性
  删除属性可以用delete运算符,它不会触及原型链中的任何对象,删除对象的属性可能会让来自原型链中的属性透现出来
  var myObject = {
  name : 'laowang',
  address : 'xi'
  };
  var anotherObject = Object.create(myObject);
  anotherObject.name = 'xiaoma';
  console.log(anotherObject.name);
  delete anotherObject.name;
  console.log(anotherObject.name); //laowang 删除了自己本身的属性,透现出来了原型的属性
  delete anotherObject.address;
  console.log(anotherObject.address); //xi 不会删除原型中的属性
  检测属性是否存在
  我们要检测一个属性是否在对象中,可以使用in操作符
  var myObject = {
  name : 'laowang',
  address : 'xi'
  };
  console.log('name' in myObject); //true
  console.log('sex'in myObject); //false
  注意:in操作符会检查属性是否在对象及原型链中,如果要检测一个属性是否在对象中,不涉及原型链,可以使用hasOwnProperty()
  var myObject = {
  name : 'laowang',
  address : 'xi'
  };
  var anotherObject = Object.create(myObject);
  console.log('name' in anotherObject); //true
  console.log(anotherObject.hasOwnProperty('name')); //false
  遍历属性
  有时需要遍历一个对象的所有属性,可以使用for..in语句
  var myObject = {
  name : 'laowang',
  address : 'xi',
  sex : 'man'
  };
  for(var i in myObject){
  console.log(myObject ); //laowang xi man
  };
  注意:for..in语句会遍历对象的可枚举属性,包括原型链
  例如:
  var myObject = {
  name : 'laowang',
  address : 'xi',
  sex : 'man'
  };
  //让myObject的name属性变得不可枚举
  Object.defineProperty(
  myObject,
  'name',
  {enumerable:false}
  );
  for(var i in myObject){
  console.log(myObject); //xi man
  };
  如果想要过滤掉那些你不想要的值,最为常用的过滤器是hasOwnProperty方法,以及使用typeof来排除函数

来源:博客园