[笔记] imooc《JavaScript深入浅出》对象与函数
懒得做草稿了,习惯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...in、Object.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]=0、arr.unshift()delete arr[2]、arr.length-=1、arr.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深入浅出》对象与函数的更多相关文章
- [原创]javascript prototype 对象 函数 <精简的美丽......>
精简的美丽...... javascript prototype 对象 函数 在javascript中我们都知道创建一个对象使用如下代码var x = {}对象可以拥有属性和方法var x = { ...
- 教程笔记《JavaScript深入浅出》
一.数据类型 javascript是弱数据类型语言,不需要显式的定义类型,一共有如下六种数据类型 五种基本类型:number,string,boolean,null,undefined 一种复合类型: ...
- JavaScript中对象与函数的某些事[JavaScript语言精粹-N1]
今天在读<JavaScript语言精粹>的时候,关于函数的一个部分,始终觉得有点难以理解,代码如下: 1: var obj = (function(){ 2: var value = 0; ...
- JavaScript Date对象和函数 (一)
JavaScript_Date对象说明 Date中文为"日期"的意思,Date继承自Object对象,此对象提供操作,显示日期与时间的函数 Date对象构造函数 Date对象具有 ...
- JavaScript学习笔记(12)——JavaScript自定义对象
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 学习笔记:javascript 窗口对象(window)
1.窗口对象属性 属性 描述 closed 返回窗口是否已被关闭. defaultStatus 设置或返回窗口状态栏中的默认文本. document 对 Document 对象的只读引用.请参阅 Do ...
- Python学习笔记之—— File(文件) 对象常用函数
file 对象使用 open 函数来创建,下表列出了 file 对象常用的函数: 1.file.close() close() 方法用于关闭一个已打开的文件.关闭后的文件不能再进行读写操作, 否则会触 ...
- 学习笔记:javascript中的Generator函数
最近在学习redux-saga,由于redux-saga需要使用Generator函数,所以下来就回顾了一下Generator Generator 函数是 ES6 提供的一种异步编程解决方案,语法行为 ...
- 【前端学习笔记】JavaScript JSON对象相关操作
//JSON方法 //JSON.parse(); var json = '{"name":"zj","age":23}'; JSON.par ...
- web前端学习(四)JavaScript学习笔记部分(8)-- JavaScript 浏览器对象
1.window对象 1.1.window对象: window对象是BOM的核心,window对象指当前的浏览器窗口 所有javaScript全局对象.函数以及变量均自动生成为window对象的成员 ...
随机推荐
- Java 实现字符串的加密与解密
package com.wangbo.util; import java.security.Key; import java.security.Security; import javax.crypt ...
- [CocoaPods]制作CocoaPod
创建自己的CocoaPod非常简单.如果你已经有一个单独的组件,那么你就是最重要的.本指南概述了整个过程,本节中的其他指南更适合更高级用户. 我们建议让CocoaPods在这里努力工作.Running ...
- 认识不一定熟悉的opencv
对很多人来说,opencv就像在旅行路上遇到的某个人,很有可能,这个只是你生命中的匆匆过客.可是,对于一个立志要做熟悉图像处理的人来说,你不能绕过他. 他是什么? OpenCV是一个基于BSD许可(开 ...
- Linux - 参考链接
01 - Linux系统监控的Shell脚本 常用的主机监控Shell脚本 使用Shell脚本对Linux系统和进程资源进行监控 02 - Linux系统结构 Linux 系统结构详解 03 - Li ...
- SpringBoot跨域小结
前言:公司的SpringBoot项目出于某种原因,经常样处理一些跨域请求. 一.以前通过查阅相关资料自己写的一个处理跨域的类,如下. 1.1首先定义一个filter(拦截所有请求,包括跨域请求) pu ...
- python学习记录(一)
1.打印操作 >>> print('hello') hello >>> print(1+2) 3 2.字符串操作 ① ') Traceback (most rece ...
- 物体检测,Error: maximum box coordinate value is too large
使用ssd目标检测,出现error:maximum box coordinate value is larger than 1.100000: ] [1.325] 主要原因在于,用labelImg 标 ...
- 课程五(Sequence Models),第一 周(Recurrent Neural Networks) —— 3.Programming assignments:Jazz improvisation with LSTM
Improvise a Jazz Solo with an LSTM Network Welcome to your final programming assignment of this week ...
- 21天打造分布式爬虫-Spider类爬取糗事百科(七)
7.1.糗事百科 安装 pip install pypiwin32 pip install Twisted-18.7.0-cp36-cp36m-win_amd64.whl pip install sc ...
- 线程安全-005-synchronized其他概念
一.Synchornized锁重入 例子程序: package com.lhy.thread01; public class SyncDouble1 { public synchronized voi ...
知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议