[笔记] 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对象的成员 ...
随机推荐
- unicode 编解码记录
unicode 万国码.世界上所有的符号都有对应的Unicode code point.一般是2个字节. 这个字节可以通过任意中方式编码为二进制,例如用来保存到文件.一般通过UTF-x(例如utf-8 ...
- 从CSR产品名录看公司发展历程和业务方向
产品型号 主要功能 BC3系列(例BC31A223, ...
- 发布一个关于SharePoint的管理小工具
源码地址: https://github.com/GavinHacker/SiteCollectionManager 这是一个C#可执行程序,用于添加,删除,备份,还原SharePoint站点,可以 ...
- CSS实现table固定宽度,超过单元格部分内容省略
<table>单元格的宽度是根据内容的大小自适应的,没有内容的地方就挤到了一起.需要固定表格宽度和每一列的宽度. table-layout:fixed 在固定表格布局中,水平布局仅取决于表 ...
- springboot创建统一异常拦截器全局处理 异常
1.创建Exception类 public class MyException extends RuntimeException { private ErrorCodeEnum errorCode; ...
- Appium定位方式总结
通过appium-desktop定位元素 ClassName Android Android的class属性对应ClassName定位方式,ClassName一般都是会重复的,可以通过index来获取 ...
- Android Systom
- 私服仓库 nexus 环境搭建(win10)
1.1 简介: Nexus 是Maven仓库管理器,如果你使用Maven,你可以从Maven中央仓库 下载所需要的构件(artifact),但这通常不是一个好的做法,你应该在本地架设一个Maven仓库 ...
- 从零开始学 Web 之 jQuery(二)获取和操作元素的属性
大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...
- 细说spring事务配置属性
一.spring事务配置 1.spring配置 在配置数据源的下方配置 <!-- 事务配置 --> <bean id="transactionManager" c ...
知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议