[笔记] 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对象的成员 ...
随机推荐
- Python脱产8期 Day014 2019/4/28
一 带参装饰器 1.通常,装饰器为被装饰的函数添加新功能,需要外界的参数 # -- outer参数固定一个,就是func # -- inner参数固定同被装饰的函数,也不能添加新参数 # -- 可以借 ...
- Alpha代码规范、冲刺任务与计划
Alpha代码规范.冲刺任务与计划 团队名称: 云打印 作业要求: Alpha代码规范.冲刺任务与计划 作业目标:代码规范.冲刺任务与计划. 团队队员 队员学号 队员姓名 个人博客地址 备注 2216 ...
- 深圳scala-meetup-20180902(3)- Using heterogeneous Monads in for-comprehension with Monad Transformer
scala中的Option类型是个很好用的数据结构,用None来替代java的null可以大大降低代码的复杂性,它还是一个更容易解释的状态表达形式,比如在读取数据时我们用Some(Row)来代表读取的 ...
- 从零搭建java后台管理系统(一)框架初步搭建
框架搭建 一.初步设想,使用springboot,框架打算用到依赖 spring web,devTools,mysql,Aspect,Redis,Lombok,Freemark,Shiro,Rabbi ...
- [git] 文件操作
文件操作 1. git add 1.1 将未被git管理的文件添加到暂存区 一次可添加多个文件 文件夹,中间用空格隔开 git add 文件/文件夹 文件/文件夹 再次执行 git sta ...
- linux中一些简便的命令之tr
tr是个简单字符处理命令,主要有以下几个用法: 1.替换字符: echo "hello,world" | tr 'a-z' 'A-Z' 执行结果:HELLO,WORLD 注释:这里 ...
- jenkins配置邮件 -- com.sun.mail.smtp.SMTPSenderFailedException: 550 5.7.1 Client does not have permissions to send as this sender
jenkins配置邮件设置 发送邮件测试时,报错: com.sun.mail.smtp.SMTPSenderFailedException: Client does not have permissi ...
- 关于appendChild和insertBefore appendTo()和append
appendChild和insertBefore(原生js) appendTo()和append(jquery)
- 从零开始学 Web 之 ES6(四)ES6基础语法二
大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...
- 从架构演进的角度聊聊Spring Cloud都做了些什么
1.从架构演进的角度聊聊Spring Cloud都做了些什么?2.中小型互联网公司微服务实践-经验和教训3.Spring Cloud在国内中小型公司能用起来吗?
知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议