饥人谷技术博客

JS 里的数据类型(下)

2019-01-21  本文已影响14人  JaniceZD

上一篇博客介绍了JS中的简单数据类型,这篇博客主要介绍JS中的复杂数据类型——对象(object)。

1. 概述

什么是对象?简单说,对象就是一组“键值对”(key-value)的集合,是一种无序的复合数据集合。

var obj = {
  foo: 'Hello',
  bar: 'World'
};

(1)键名

对象的所有键名都是字符串(ES6 又引入了 Symbol 值也可以作为键名),所以加不加引号都可以。

var obj = {
  'foo': 'Hello',
  'bar': 'World'
};

a. 如果键名是数值,会被自动转为字符串。
b. 如果键名不符合标识名的条件(比如第一个字符为数字,或者含有空格或运算符),且也不是数字,则必须加上引号,否则会报错。
c. object 里面可以有 object

  var person = {
      name: 'Frank', 
      'child': {
          name: 'Jack'
      }, // 最后这个逗号可有可无
  }

对象的每一个键名又称为“属性”(property),它的“键值”可以是任何数据类型。

(2)对象的引用

如果不同的变量名指向同一个对象,那么它们都是这个对象的引用,也就是说指向同一个内存地址。修改其中一个变量,会影响到其他所有变量。

var o1 = {};
var o2 = o1;

o1.a = 1;
o2.a // 1

o2.b = 2;
o1.b // 2

2. 属性的操作

(1)读取对象的属性

读取对象的属性,有两种方法,一种是使用点运算符,还有一种是使用方括号运算符。

var obj = {
  p: 'Hello World'
};

obj.p // "Hello World"
obj['p'] // "Hello World"

请注意,如果使用方括号运算符,键名必须放在引号里面,否则会被当作变量处理。

var foo = 'bar';

var obj = {
  foo: 1,
  bar: 2
};

obj.foo  // 1
obj[foo]  // 2

a. 数字键可以不加引号,因为会自动转成字符串。
b. 数值键名不能使用点运算符(因为会被当成小数点),只能使用方括号运算符。

var obj = {
  123: 'hello world'
};

obj.123 // 报错
obj[123] // "hello world"

(2)查看所有属性

查看一个对象本身的所有属性,可以使用Object.keys方法。

var obj = {
  key1: 1,
  key2: 2
};

Object.keys(obj);
// ['key1', 'key2']

(3)属性的删除:delete 命令

delete命令用于删除对象的属性,删除成功后返回true。

var obj = { p: 1 };
Object.keys(obj) // ["p"]

delete obj.p // true
obj.p // undefined
Object.keys(obj) // []

需要注意的是,delete命令只能删除对象本身的属性,无法删除继承的属性。

(4)属性是否存在:in 运算符

in运算符用于检查对象是否包含某个属性(注意,检查的是键名,不是键值),如果包含就返回true,否则返回false。举例说明:

var obj = { p: 1 };
'p' in obj // true

(5)属性的遍历:for...in 循环(遍历顺序不定)

var obj = {a: 1, b: 2, c: 3};

for (var i in obj) {
  console.log('键名:', i);
  console.log('键值:', obj[i]);
}
// 键名: a
// 键值: 1
// 键名: b
// 键值: 2
// 键名: c
// 键值: 3

i 是键名, obj[i] 是键值

for...in循环有两个使用注意点。


typeof 操作符

JavaScript 有三种方法,可以确定一个值到底是什么类型。

typeof运算符可以返回一个值的数据类型。

xxx 的类型 string number boolean symbol undefined null object function
typeof xxx ‘string’ ‘number’ ‘boolean’ ‘symbol’ ‘undefined’ ‘object’ ‘object’ ‘function’

注意 function 并不是一个类型
js里的一切皆对象是错误的说法
array和function是属于object里的

参考文档:

  1. 阮一峰JS教程
上一篇 下一篇

猜你喜欢

热点阅读