属性的操作

typeof 运算符

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

数值、字符串、布尔值分别返回numberstringboolean

typeof 123 // "number"
typeof '123' // "string"
typeof false // "boolean"

函数返回function。

function f() {}
typeof f
// "function"

undefined返回undefined。

typeof undefined
// "undefined"

利用这一点,typeof可以用来检查一个没有声明的变量,而不报错。

v
// ReferenceError: v is not defined

typeof v
// "undefined"

上面代码中,变量v没有用var命令声明,直接使用就会报错。但是,放在typeof后面,就不报错了,而是返回undefined

实际编程中,这个特点通常用在判断语句。

// 错误的写法
if (v) {
  // ...
}
// ReferenceError: v is not defined
// 正确的写法
if (typeof v === "undefined") {
  // ...
}

对象返回object

typeof window // "object"
typeof {} // "object"
typeof [] // "object"

上面代码中,空数组([])的类型也是object,这表示在 JavaScript 内部,数组本质上只是一种特殊的对象。

var o = {};
var a = [];

o instanceof Array // false
a instanceof Array // true
null返回object。

typeof null // "object"

属性的删除:delete

var person={name:'frank'}先声明了一个对象,把这个对象赋值给变量person
delete person['name']表示既删除了key(name),也删除了value(frank )
person.name=undefined 表示只是把value(frank)变成了undefined,但是key(name)还是在person里面的。

delete的用法

属性是否存在:in运算符

in运算符用于检查对象是否包含某个属性(注意,检查的是键名,不是键值),如果包含就返回true,否则返回false。它的左边是一个字符串,表示属性名,右边是一个对象。

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

属性的遍历:for...in循环

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

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

它遍历的是对象所有可遍历(enumerable)的属性,会跳过不可遍历的属性。
它不仅遍历对象自身的属性,还遍历继承的属性。
举例来说,对象都继承了toString属性,但是for...in循环不会遍历到这个属性。

var obj = {};

// toString 属性是存在的
obj.toString // toString() { [native code] }

for (var p in obj) {
  console.log(p);
} // 没有任何输出

上面代码中,对象obj继承了toString属性,该属性不会被for...in循环遍历到,因为它默认是“不可遍历”的。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 0. 写在前面 当你开始工作时,你不是在给你自己写代码,而是为后来人写代码。 —— Nichloas C. Zak...
    康斌阅读 10,750评论 1 42
  • HTML元素包括标签名和若干个键值对,这个键值对就称为“属性”(attribute)。 上面代码中,a元素包括两个...
    许先生__阅读 2,778评论 0 1
  • HTML元素包括标签名和若干个键值对,这个键值对就称为“属性”(attribute)。 上面代码中,a元素包括两个...
    周花花啊阅读 3,056评论 0 0
  • 以下四个操作会忽略Object.getOwnPropertyDescriptor中enumerable为false...
    施主画个猿阅读 4,039评论 0 1
  • 萍水相逢作为一种日常,相逢意义大多超于表象。 上世纪六十年代,白色衬衫是男性经典性幻想的服装代表之一。二战期间,一...
    4f337bdfd6ad阅读 1,877评论 0 0

友情链接更多精彩内容