提起操作, 很多人都会想到我们学习过程中最经常做的操作, 就是对数据库进行增, 删, 改, 查, 既然提到这个, 那么对于对象的属性操作也不例外, 基本上可以说也是这几个操作.

  JS中对象的属性标签

  writable(可写), enumerable(可枚举), configurable(可配置), value(值), get/set(get, set方法). 这几个标签会在后面逐渐丰富, 这里先简单介绍下.

  属性的读写

  属性的读写在介绍对象的时候基本已经说的差不多了, 这里补充和总结一下. 这里通过".方法", 或者通过key值的字符串作为索引读取写入.

  var object = {

      x : 1,

      y : 2

    };

  document.write(object.x);  // 1

  document.write(object["y"]);  // 2

  object["x"] = 3;

  object.y = 4;

  document.write(object["x"]);  //3

  document.write(object.y);  //4

  遍历对象属性

  一般通过for in遍历对象的属性, 针对上面的对象, 上代码说话.

  var p;

  for (p in object){

    if (object.hasOwnProperty(p)){

       document.write(p + " : "object[p] + "<br />");

    }

  }

  这段代码旨在将object上面的全部属性遍历出来, 中间加了个判断, 因为for in是将全部的属性, 包括原型链上的属性遍历一遍的, 所以在遍历对象属性的时候切记不要忘记了加上判断.

  undefined的属性读写

  undefined是不具有属性的, 所以切记不要为undefined设置属性和读取属性.

  属性的删除

  delete关键字, delete是用来删除对象的属性和变量的. 下面演示下其用法, 顺便简单介绍下什么状态的属性变量可以删除, 什么时候不可以.

  var object = {

      x : 1,

      y : 2

    };

  delete object.x;  //true

  delete object["y"];  //true

  document.write(object.x);  //undefined

  document.write(object.y);  //undefined

  上面就是成功通过delete关键字删除了object的属性, 但是delete这个方法并不是总是很有用, 这里介绍下一个新的概念DontDelete, 这个可以称之为是一个对象的一个标签, 如果一个对象创建的时候持有了这个标签, 那么就不允许被删除.

  持有DontDelete的属性标记情况

  显式声明一个变量(全局, 局部), 函数, 对象, 都持有DontDelete

  var variable = 1;  //显式声明的全局变量

  delete variable;  //false

  

  function func(){};  //显式声明的函数

  delete func;  //false

  local = 5;  //隐式设置一个全局的属性

  delete local;  //true

  内建对象是自动持有DontDelete标记的, 比如函数内的arguments数组对象, 作为参数数组的内建对象, 是不允许被删除的.

  通过eval()声明的变量是可以删除的, 原因也是在eval中声明的变量创建时都不会持有DontDelete标记的.

  eval('var variable = 3;');

  variable;  //3

  delete variable;  //true

  综上所述, 我有一点个人理解, 对错以后随着我的认识会回来修改, 毕竟写东西不就是让人推翻讨论的么, 我认为delete的特性就是在非eval情况下只可以删除一个已有对象的属性, 而不可以删除一段开辟的内存空间, 显式的声明变量其实是为变量开辟了一块内存, 函数, 对象都是如此, 所以这些都不可以删除, 而对象的属性, 隐式的全局变量(其实就是上下文中this的属性), 这些都是一个对象的属性, 所以他们使可以删除的. eval是JS的动态特征, 类似于OC的runtime貌似, 还没有研究的太深, 所以就不深入讨论了, 知识有限.

  属性的检测

  想要知道一个对象是否具有一个属性, 有几个方式进行检测, 下面会细分.

  in

  如果想要简单的判断一个对象及其原型链是否具有一个属性, 只需要使用in操作符, 它的特性就是无论是自身持有, 还是原型链持有, 都会返回true.

  var person = {

      name : "JianweiWang",

      age : "23",

    };

  'name' in person;  //true, 自身持有

  'hobby' in person;  //false, 自身不持有

  'toString' in person;  //true, 原型链持有

  in操作符的左边通常是一个字符串, 右边必须是一个对象.

  hasOwnProperty()方法

  这个是仅判断当前对象是否具有属性, 它并不会检测原型链上的属性. 所以如果需要准确的判断对象自持有哪些属性, 就选择使用hasOwnProperty()方法, 参数为属性名的字符串.

  var person = {

      name : "JianweiWang",

      age : "23",

    };

  person.hasOwnProperty('name');  //true, 自身持有

  person.hasOwnProperty('toString');  //false, 原型链持有

  Object.keys()方法

  这个方法的作用是将参数对象自身所持有的所有属性(并不会有原型链上的属性), 展现出来, 方法参数要求是对象.

  var person = {

      name : "JianweiWang",

      age : "23",

    };

  document.write(Object.keys(person));  //name, 23

  

转载于:https://www.cnblogs.com/JianweiWang/p/5213843.html

了解JavaScript 对象的属性操作相关推荐

  1. 如何列出JavaScript对象的属性?

    本文翻译自:How to list the properties of a JavaScript object? Say I create an object thus: 假设我创建了一个对象: va ...

  2. JavaScript中的属性操作

    为什么80%的码农都做不了架构师?>>>    JavaScript中的属性操作 一. 原型链 在js中,任何一个对象都有一个prototype属性,在js中记做:_proto_. ...

  3. 如何枚举JavaScript对象的属性? [重复]

    本文翻译自:How do I enumerate the properties of a JavaScript object? [duplicate] This question already ha ...

  4. JavaWeb_域对象的属性操作

    JavaWeb_域对象的属性操作 和属性相关的方法: 1)方法 Object getAttribute(String name):获取指定的属性 Enumeration getAttributeNam ...

  5. 如何动态合并两个JavaScript对象的属性?

    我需要能够在运行时合并两个(非常简单的)JavaScript对象. 例如,我想: var obj1 = { food: 'pizza', car: 'ford' } var obj2 = { anim ...

  6. javaScript 对象添加属性和创建js对象的方式(以及理解:“无法给构造函数添加新的属性“)

    1.javaScript 对象想要添加属性,非常简单 (1)直接添加,使用语法:objectName.propertyName 添加属性. 举例: var person = new Object(); ...

  7. javaScript 对象访问属性的另一种方式

    var zhang={name:"zb",secondName:"xiaodaidai"}console.log(zhang["name"] ...

  8. JavaScript创建对象的两种方法和遍历对象的属性

    创建新对象有两种不同的方法: 定义并创建对象的实例 使用函数来定义对象,然后创建新的对象实例 1.定义并创建对象的实例 var person=new Object(); person.firstnam ...

  9. JavaScript对象属性及方法

    JavaScript对象属性及方法 1.对象属性 JavaScript对象时属性变量的容器,以键值对name:value的形式存在,访问方式为 name.value name[value] 2.对象方 ...

最新文章

  1. 30+程序员,平时都忙些什么事情?平时都想些什么?以后有啥计划?
  2. Python基础-第二天
  3. golang值为nil的channel
  4. Cannot find module -----Node.js编程的第一个问题
  5. android频道编辑实现_短说频道功能详解—构建你社区的小门户
  6. 云信小课堂 | 聊天室内容审核很头疼? 3 步解决!
  7. 数平精准推荐 | OCR技术之系统篇
  8. java去除字符串的html标签
  9. 粘贴复制Android复制和粘贴的实现
  10. HTML+CSS+JS实现echarts图表炫光分布地图动画
  11. 白银TD盈亏计算实例介绍
  12. python 给字符串加颜色
  13. 计算机教师辞职,(多篇)教师辞职报告汇总八篇
  14. 推荐一门开源课程“C/C++:从基础语法到优化策略”
  15. Windows系统安装adb/fastboot驱动教程
  16. 中铁置业引入USB Server助力RPA机器人
  17. 软件工程--快速原型模型详解
  18. Python+Vue计算机毕业设计房屋租赁管理系统p8pvy(源码+程序+LW+部署)
  19. 有余记账(h5记账类项目)
  20. Win10鼠标右键添加CMD选项

热门文章

  1. ASP调用sql server 存储过程详解-附带实例-
  2. ROS学习(十四):ROS Spinning
  3. Matlab Robotic Toolbox V9.10工具箱(二):正/逆运动学
  4. reduce实现filter,map 数组扁平化等
  5. Scrapy 框架 中间件,信号,定制命令
  6. Qt 常量中有换行符 中文
  7. 【C++多线程系列】【七】实现经典的C/S架构
  8. Cloudstack介绍(一)
  9. [LeetCode]: 62: Unique Paths
  10. “4K云字库”基本框架图