懒得做草稿了,习惯md也懒得扔印象笔记
主要是之前没去接触这一部分,就随手记下来了

创建对象的方法

  • 对象字面量
  • new构造器/原型链
  • Object.create()

属性操作

  • 属性读写(以及读写异常、a && a.b && a.b.c)
  • 属性删除(delete、全局/局部 变量/函数名、不允许删除的属性、configurable)
  • 属性检测(in操作符、hasOwnProperty()propertyIsEnumerable()defineProperty()
  • 属性枚举(in + if hasOwnProperty())

属性标签(属性级的权限设置)

  • (writable、enumerable、configurable、value)
  • getOwnPropertyDescriptor()
  • defineProperty()defineProperties()
  • 遍历:enumerable: false,影响for...inObject.keys()

对象标签

  • ( [[proto]]、[[class]]、[[extensible]] )
  • 对象类名:Object.prototype.toString.call().slice(8, -1)
  • 对象扩展:Object.isExtensible()Object.preventExtensions()
  • 禁止对象修改属性标签、删除属性:Object.isSealed()Object.seal()
  • 冻结对象上的属性修改:Object.isFrozen()Object.freeze()
  • 只影响传入对象本身,不影响原型链

对象序列化

  • !!注意:undefined不会出现,NaN 和 Infinity 会转成null,Date类型会转成ISO时间格式(toJSON()toISOString()
  • 自定义序列化:在对象中添加toJSON()方法
  • valueOf()返回基本数据类型,toString()返回字符串

创建数组

  • 数组字面量(可以逗号间隔,undefined,末尾忽略)
  • 最大长度2**23-1(应该是取决于堆大小或者其他的设置,我的浏览器和node都是2**32-1
  • new Array(n),不用new也可以

数组元素操作

  • delete不会改变数组长度,undefined,但不可枚举(没有kv索引)
  • arr.push()arr[arr.length]=0arr.unshift()
  • delete arr[2]arr.length-=1arr.pop()arr.shift()

函数

  • JS中的函数常叫做函数对象
  • new构造器如果没有返回值,或返回基本类型,则返回this

函数调用方式

  • 直接调用:foo()
  • 对象方法:obj.method()
  • 构造器:new Foo()
  • call/apply/bind:func.call(o)

函数与this

  • 一般函数的this:window(浏览器)、global(node)、undefined(严格模式)
  • 作为对象方法的函数中的this:指向对象(其实是指向执行上下文对象)
  • 对象原型链上的this:指向对象(而不是原型链)
  • get/set方法与this:指向执行get/set的对象
  • 构造器中的this:new的过程中是一个空对象(其原型指向Foo.prototype
  • call/apply方法与this:指向传入的第一个参数(基本类型会转为包装类)
  • bind方法与this:新函数的this绑定到传入bind的第一个参数(其他形参也可以绑定)

函数属性与arguments

  • 函数名:foo.name,函数形参个数:foo.length

ES3执行上下文

  • 变量对象(VO,Variable Object)、激活对象(AO)
  • 函数变量初始化阶段,VO按顺序填充(函数表达式不会影响VO):
    • 函数参数(未传入的为undefined)
    • 内部函数声明(发生命名冲突会覆盖,即覆盖形参)
    • 内部变量声明(全都undefined,命名冲突则忽略)
  • 代码执行阶段:变量的赋值、函数的调用等

本文基于知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议发布,欢迎引用、转载或演绎,但是必须保留本文的署名BlackStorm以及本文链接http://www.cnblogs.com/BlackStorm/p/7222016.html,且未经许可不能用于商业目的。如有疑问或授权协商请与我联系

[笔记] imooc《JavaScript深入浅出》对象与函数的更多相关文章

  1. [原创]javascript prototype 对象 函数 <精简的美丽......>

    精简的美丽...... javascript prototype 对象 函数 在javascript中我们都知道创建一个对象使用如下代码var x = {}对象可以拥有属性和方法var x = {   ...

  2. 教程笔记《JavaScript深入浅出》

    一.数据类型 javascript是弱数据类型语言,不需要显式的定义类型,一共有如下六种数据类型 五种基本类型:number,string,boolean,null,undefined 一种复合类型: ...

  3. JavaScript中对象与函数的某些事[JavaScript语言精粹-N1]

    今天在读<JavaScript语言精粹>的时候,关于函数的一个部分,始终觉得有点难以理解,代码如下: 1: var obj = (function(){ 2: var value = 0; ...

  4. JavaScript Date对象和函数 (一)

    JavaScript_Date对象说明  Date中文为"日期"的意思,Date继承自Object对象,此对象提供操作,显示日期与时间的函数 Date对象构造函数 Date对象具有 ...

  5. JavaScript学习笔记(12)——JavaScript自定义对象

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  6. 学习笔记:javascript 窗口对象(window)

    1.窗口对象属性 属性 描述 closed 返回窗口是否已被关闭. defaultStatus 设置或返回窗口状态栏中的默认文本. document 对 Document 对象的只读引用.请参阅 Do ...

  7. Python学习笔记之—— File(文件) 对象常用函数

    file 对象使用 open 函数来创建,下表列出了 file 对象常用的函数: 1.file.close() close() 方法用于关闭一个已打开的文件.关闭后的文件不能再进行读写操作, 否则会触 ...

  8. 学习笔记:javascript中的Generator函数

    最近在学习redux-saga,由于redux-saga需要使用Generator函数,所以下来就回顾了一下Generator Generator 函数是 ES6 提供的一种异步编程解决方案,语法行为 ...

  9. 【前端学习笔记】JavaScript JSON对象相关操作

    //JSON方法 //JSON.parse(); var json = '{"name":"zj","age":23}'; JSON.par ...

  10. web前端学习(四)JavaScript学习笔记部分(8)-- JavaScript 浏览器对象

    1.window对象 1.1.window对象: window对象是BOM的核心,window对象指当前的浏览器窗口 所有javaScript全局对象.函数以及变量均自动生成为window对象的成员 ...

随机推荐

  1. ArcEngine不同种类的工作空间建立查询ICursor时“超出系统资源”

    环境 这里我的工作空间有两种:mdb库和SDE库分别打开的工作空间. 查询语句:使用Field in ('1','2')查询方式来得到游标对象. 错误 当查询语句中in后面的条件值大于1500时,在I ...

  2. Kaldi如何准备自己的数据

    Introduction 跑完kaldi的一些脚本例子,你可能想要自己用Kaldi跑自己的数据集.这里将会阐述如何准备好数据. run.sh较上的部分是有关数据准备的,通常local与数据集相关. 例 ...

  3. DWARF 中的 Debug Info 格式

    本周花了几天的时间来研究怎么在 breakpad [1, 2] 中加入打印函数参数的功能,以期其产生的 callstack 更具可读性,方便定位崩溃原因. 现代 ELF 中的调试信息基本是以 DWAR ...

  4. IPv6技术详解:基本概念、应用现状、技术实践(下篇)

    本文来自微信技术架构部的原创技术分享. 1.前言 在上篇<IPv6技术详解:基本概念.应用现状.技术实践(上篇)>,我们讲解了IPV6的基本概念. 本篇将继续从以下方面展开对IPV6的讲解 ...

  5. 从小白到使用antd+react+react-router+issue+es6搭建博客

    概述 本身是前端小白,学过html,css,js的各种书,各种视屏,就是没有接触web开发的内容.偶然看见一个朋友用react搭建了一个博客,于是本着程序员无所不能的精神,也尝试着用react搭建博客 ...

  6. Jmeter HTTP请求后响应数据显示乱码解决方法

    Jmeter请求后结果树里无论是text还是html响应数据显示乱码,这是因为jmeter 编码格式配置文件默认不开启导致的,解决方法如下: 1)进入jmeter-***\bin目录下,找到jmete ...

  7. Java gc中的那些事

    我们已经知道Java堆是被所有线程共享的一块内存区域,所有对象实例和数组都在堆栈进行内存分配.为了进行高效的垃圾回收,虚拟机把堆内存划分成新生代年代(旧一代)和永久代(永久代)3个区域. 新生代 新生 ...

  8. 关于 Spring Security 5 默认使用 Password Hash 算法

    账户密码存储的安全性是一个很老的话题,但还是会频频发生,一般的做法是 SHA256(userInputpwd+globalsalt+usersalt) 并设置密码时时要求长度与大小写组合,一般这样设计 ...

  9. Git 强制回退到某个历史版本再推送到远程

    1. 使用 git log 命令历史版本记录回退版本 git reset --hard f6a7c803a6931a9eca011d4e097389e0845cbe49 2. 推送到远程 git pu ...

  10. 希尔排序——Shell Sort

    前言: 数据序列1: 13-17-20-42-28 利用插入排序,13-17-20-28-42. Number of swap:1;数据序列2: 13-17-20-42-14 利用插入排序,13-14 ...