美文网首页饥人谷技术博客
JS 里的数据类型(下)

JS 里的数据类型(下)

作者: JaniceZD | 来源:发表于2019-01-21 23:17 被阅读14次

上一篇博客介绍了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循环有两个使用注意点。

  • 它遍历的是对象所有可遍历(enumerable)的属性,会跳过不可遍历的属性。
  • 它不仅遍历对象自身的属性,还遍历继承的属性。

typeof 操作符

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

  • typeof运算符
  • instanceof运算符
  • Object.prototype.toString方法

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教程

相关文章

  • JS 里的数据类型(下)

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

  • JS 高频面试题汇总

    # 说一下JS 中的数据类型有哪些 JS 数据类型包括 基本 / 引用 / 特殊 数据类型: 基本数据类型:Str...

  • js深拷贝

    在写深拷贝之前,有必要说一下js的数据类型 一.js数据类型 1.1 分类 js数据类型分为两类:原始数据类型、引...

  • JS 面试题汇总

    说一下JS 中的数据类型有哪些 JS 数据类型包括 基本 / 引用 / 特殊 数据类型: 1.基本数据类型:Str...

  • JS 里的数据类型

    JS 里的数据类型 JS中有七种数据类型,分别是:number,string,boolean,undefined,...

  • JS 里的数据类型转换

    JS 里的数据类型转换 Js中的数据类型一共有7种,即number,string,boolean,underfin...

  • JS 基本数据类型和引用数据类型的区别及浅拷贝和深拷贝

    JS基本数据类型和引用数据类型 再讲 js 的基本数据类型和引用数据类型之前,我们先说一下栈和堆的概念 1、栈(s...

  • 《JS里的数据类型》

    JS里的数据类型分为 原始数据类型(primitive type) 和 合成数据类型(complex type)...

  • 2021-04-14

    JS浅拷贝、深拷贝小整理 说这个话题之前,先扯一下JS的基本数据类型: 1,Javascript数据类型: 值类型...

  • JavaScript数据类型

    JS 里的数据类型 七种数据类型 Number,String,Boolean,Null,Undefined,Sym...

网友评论

    本文标题:JS 里的数据类型(下)

    本文链接:https://www.haomeiwen.com/subject/kyzhjqtx.html