1. JS 将对象看成是属性的无序集合, 每个属性是一个key/value, 属性名是字符串, 值为任意类型; 对象除了键值对, 还从一个称为 "原型" 的 对象 继承属性(为啥是从对象继承呢? ). 对象的方法通常是继承来的, 原型继承是js的核心特征.

2. 对象中不能存在同名的属性(怎么重载呢?), 属性特性:

  - 可写: 表示可以设置该属性的值

  - 可枚举: 表示可以使用for/in循环返回该属性

  - 可配置: 表示可以删除和或修改该属性(名)

3. 对象除了包含属性之外,其他特征:

  - 对象的原型: 指向另一个对象, 本对象的属性继承自它的原型对象.

  - 对象的类:  是一个标志对象类型的字符串

  - 对象的扩展标记: 表明是否可以向该对象添加新的属性.

4. 对对象和属性分类

  - 内置对象: ECMAScript规范定义的对象或类, 如: 数组, 函数, 日期和正则

  - 宿主对象: 由js解析器嵌入的宿主环境(如web浏览器)定义的. 客户端js中表示网页结构的HTMLElement对象都是宿主对象.  既然宿主环境定义的方法可以当成普通的JavaScript函数对象, 那么宿主对象也可以当成内置对象.

  - 自定义对象: 运行中js代码创建的对象

  - 自有属性: 直接在对象中定义的属性.

  - 继承属性: 对象从原型对象中定义的属性

5. 对象的定义和使用中需要注意的地方.

  - 属性名字有空格,连字符等特殊符号/使用保留字时要用引号(单引号双引号均可)表示.

  - 属性访问并不总是返回或者设置一个值, 查询一个不存在的属性并不会报错, 而是返回undefined. 但是对象不存在就会报错, 可以使用短路的 && 操作符来先保证对象存在:  var len = book && book.subtitle && book.subtitle.length; 避免类型错误异常.

  - delete只能删除对象的自有属性, 而不能删除继承属性, 要删除继承属性必须从定义这个属性的原型对象上删除它, 而且这样会影响到所有继承自这个原型的对象). 删除已经删除过的属性什么都不会做,然后依然返回true(如果delete 后面不是一个属性访问表达式, 同样返回true. 如 delete 1). 删除不可配置属性会返回false, 某些内置对象的属性是不可配置的, 如在浏览器中通过变量声明和函数声明创建的全局对象的属性 (在nodejs中就不一定).

o = {x:}; // 没有var , 创建了一个可配置的全局对象的属性
console.log(delete o.x);
console.log(delete o.x);
console.log(delete Object.prototype)
var x = ; // 有var , 创建了一个不可配置的全局对象的属性.
console.log(delete this.x);
function f(){} // 创建了不可配置的全局对象的属性.
console.log(delete this.f)

在浏览器和nodejs中得到的结果不一样, 可能是因为内置对象的可配置属性不一样吧, 如果想调试delete的返回结果, 那么可以查询一下你要删除的属性是否为可配置的.

6. 原型

  - 除了null外, 每一个js对象都与另一个对象(原型)关联. 通过对象直接量创建的对象都具有同一个原型对象.

  - 通过js代码Object.prototype 获取对原型对象的引用. 通过new和构造函数调用创建的对象的原型就是构造函数的prototype属性的值, 也是继承自Object.prototype. (new Date() 创建的对象的原型是: Date.prototype).


-->

JavaScript 对象笔记的更多相关文章

  1. javascript对象笔记

    JS对象     对象是一个具体的事物     在JS中对象是一组无序属性和方法的集合例如字符串,数组,函数等等     对象是由属性和方法组成的     属性:是事物的特征,在对象中用属性来表示一般 ...

  2. JavaScript学习笔记(十五)——对象之Date,RegExp

    在学习廖雪峰前辈的JavaScript教程中,遇到了一些需要注意的点,因此作为学习笔记列出来,提醒自己注意! 如果大家有需要,欢迎访问前辈的博客https://www.liaoxuefeng.com/ ...

  3. JavaScript:学习笔记(9)——Promise对象

    JavaScript:学习笔记(9)——Promise对象 引入Promise Primose是异步编程的一种解决方案,比传统的解决方案回调函数和事件更加合理和强大.如下面为基于回调函数的Ajax操作 ...

  4. JavaScript:学习笔记(8)——对象扩展运算符

    JavaScript:学习笔记(8)——扩展运算符 对象的扩展运算符 扩展运算符是三个点(...).用于取出参数对象的所有可遍历属性,然后拷贝到当前对象之中. 如上图所示,新建了一个对象a,然后通过扩 ...

  5. javaScript 对象学习笔记

    javaScript 对象学习笔记 关于对象,这对我们软件工程到学生来说是不陌生的. 因为这个内容是在过年学到,事儿多,断断续续,总感觉有一丝不顺畅,但总结还是要写一下的 JavaScript 对象 ...

  6. JavaScript:学习笔记(10)——XMLHttpRequest对象

    JavaScript:学习笔记(10)——XMLHttpRequest对象 XHR对象 使用XMLHttpRequest (XHR)对象可以与服务器交互.您可以从URL获取数据,而无需让整个的页面刷新 ...

  7. Javascript学习笔记——操作浏览器对象

    Javascript学习笔记 目前尝试利用javascript去对于一个浏览器对象完成一系列的访问及修改, 浏览器是网页显示.运行的平台,常用的浏览器有IE.火狐(Firefox).谷歌(Chrome ...

  8. JavaScript学习笔记(一)——延迟对象、跨域、模板引擎、弹出层、AJAX示例

    一.AJAX示例 AJAX全称为“Asynchronous JavaScript And XML”(异步JavaScript和XML) 是指一种创建交互式网页应用的开发技术.改善用户体验,实现无刷新效 ...

  9. JavaScript学习笔记——对象知识点

    javascript对象的遍历.内存分布和封装特性 一.javascript对象遍历 1.javascript属性访问 对象.属性 对象[属性] //字符串格式 //javascript属性的访问方法 ...

随机推荐

  1. 关于ppt的字体(转载)

    壹文钱:教程(13)——字体篇(上) 2015-11-25 @嘉文钱 幻方秋叶PPT 前三期嘉文给大家说了颜色,想复习的童鞋,链接在此: 壹文钱:教程(10)——色色,你好! 壹文钱:教程(11)—— ...

  2. Spring中FactoryBean与BeanFactory的区别

    版本:spring-framework-4.1 一概述 BeanFactory 与 FactoryBean的区别, 两个名字很像,面试中也经常遇到,所以容易搞混,现从源码以及示例两方面来分析. 二.源 ...

  3. git推送报错: No path specified. See 'man git-pull' for valid url syntax或does not appear to be a git repository以及remote: error: insufficient permission for adding an object to repository databa

    本地(windows)代码想推送到linux自己搭建的git服务端,第一步是建立本地与服务端的关联,第二步是本地推送到服务端. 第一步需要看你的本地工程是否从git上clone来的,如果是clone来 ...

  4. 【linux】用户与组

    一.用户和组的基本概念                                               1.用户 用户:用于获取计算机资源或服务的标识符,比如用户名.计算机处理的是UID, ...

  5. 32位汇编基础_cpu 寄存器

    32位通用寄存器 EAX EBX ECX EDX EBP ESP ESI EDI 八个寄存器都可以作为普通的数据寄存器使用.但有的有特殊的用途: EAX    为累加器, ECX    为计数器, E ...

  6. 学习笔记之SQL 教程

    SQL 教程 | 菜鸟教程 http://www.runoob.com/sql/sql-tutorial.html SQL,指结构化查询语言,全称是 Structured Query Language ...

  7. mysql-9索引

    mysql索引的建立对于mysql的高效运行是很重要的,索引可以大大提高mysql的检索速度. 索引分为单列索引和组合索引. 单列索引,即一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索 ...

  8. 32位ubuntu14.04手动编译hadoop2.6.0

    下载官方编译好的包安装老是报错:Unable to load native-hadoop library for your platform 用file命令查看发现官方包里的libhadoop.so. ...

  9. 客户端调用wcf服务,如何提高调用性能

    IO调用服务 1.使用using(每次自动释放) ; i < ; i++) { var watch = new Stopwatch(); watch.Start(); using (var cl ...

  10. Linux Storage Stack Diagram存储堆栈图

    这是一个描述非常好的存储栈,版本为:Linux Storage Stack Diagram v4.10,我在这里转载下图片,可以提升大家对存储栈的理解. https://www.thomas-kren ...