JS 对象基本用法

什么是JavaScript对象?

JS共有7中数据类型:string、number、Boolean、null、undefined、symbol、object。前六种都可归为简单类型,最后一种的object是复杂类型。object又可以分为:数组、日期,甚至函数等等。
JavaScript 中,对象是拥有属性方法的数据,是无序的数据集合,是键值对的集合。

声明对象的两种语法

  • let obj = {'name': 'OQQ', 'age':21}
    常用简写方法,【这个obj是对象名,对象名不是必须叫obj】
  • let obj = new Object({'name': 'OQQ', 'age': 21})
    官方正确的写法!→let 对象名=new Object({'键名(属性名)':'键值(属性值)',...,...})

键名可以包含任何字符,'键名'的引号可以省略,但最好不省略以避免出错。

注意:

  • 键名不管有没有加引号都是字符串!!!键名是字符串!!!字符串!!!
  • 给属性名加个中括号[],可以用变量做属性名,值如果不是字符串会自动变成字符串。
  • Object.keys(obj)可以获得名为obj的对象的所有键名(属性名)(key)。

如何删除对象的属性

  • 1.delete obj.xxx
  • 2.delete obj['xxx']
    这样可以删除对象obj中名为xxx的属性。

注意:
'xxx' in obj可以判断对象中还有没有某个属性名。存在返回true,不存在返回false。
'xxx' in obj && obj.xxx可以判断对象某个属性名的值是不是undefined。属性值为undefined时返回undefined,否则返回false。

如何查看对象的属性

  • Object.keys(obj) 查看自身属性的,方法会返回一个由一个给定对象的自身可枚举属性组成的数组,数组中属性名的排列顺序和正常循环遍历该对象时返回的顺序一致 。
  • Object.values(obj)查看自身属性的,方法返回一个数组,其元素是在对象上找到的可枚举属性值。属性的顺序与通过手动循环对象的属性值所给出的顺序相同。
  • Object.entries(obj)查看自身属性的,方法返回一个数组,其元素是与直接在object上找到的可枚举属性键值对相对应的数组。属性的顺序与通过手动循环对象的属性值所给出的顺序相同。
  • obj.hasOwnProperty('XXX')可以判断一个属性是自身的还是共有的。如果是自身属性,返回true,如果是共有属性,返回false。

注意
当对象中不存在要判断的属性时,obj.hasOwnProperty('XXX')的返回值也是false,所以判断一个属性是否为自身属性是应该先用'xxx' in obj判断对象中有没有这个属性

obj['key']obj.key可以查看某一个属性的值(key为要查看的属性名,obj为对象名)。

如何修改或增加对象的属性

修改自身属性
  • 直接赋值
  let obj = { 'name' : 'bob'}
  obj.name = 'bob'
  obj['name'] = 'bob'
  obj['na' + 'me'] = 'bob'
  let key = 'name'; obj[key] = 'bob'
  • 批量赋值
  Object.assign(obj, {'name' : 'bob', 'age' : 18})
修改共有属性

一般来说,无法通过自身修改或增加共有属性。非要改就按下方代码来:

  let obj = {name: 'Tom'};
  Object.prototype.toString='xxx';
  obj.toString     //'xxx'
修改隐藏属性

let obj = Object.create(common)Object.create(common)修改的是原型属性。例如:

let common = {hairColor: 'black', country: '中国'};
let obj = Object.create(common);
obj.name = '张三';
let obj2 = Object.create(common);
obj2.name = '李四';
Object.assign(obj2, {age: 18, city: '北京'});
console.log(obj.country); // "中国"
console.log(obj2.country); // "中国"

'name' in obj和obj.hasOwnProperty('name') 的区别

  • 'name' in obj查看属性name是否在obj里。
  • obj.hasOwnProperty('name')用来检测obj是否含有特定的自身属性name。这个方法会查找一个对象是否有某个属性,但是不会去查找它的原型链。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容