[笔记] 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 使用进程池Pool进行并发编程
进程池Pool 当需要创建的子进程数量不多时,可以直接利用multiprocessing中的Process动态成生多个进程,但如果是上百甚至上千个目标,手动的去创建进程的工作量巨大,此时就可以用到mu ...
- CentOS防火墙配置
1.查询防火墙状态 service iptables status 2.开启防火墙 service iptables start 3.关闭防火墙 service iptables stop 4.重启防 ...
- 设置win版vim启动项[利刃篇]
vim默认启动设置有时不太好,想改一下,但是又不像windows其他软件那样,界面设置后就生效,这里需要手动设置文件才可以,那就赶紧设置一下吧! 修改文件为 vim安装目录/_vimrc 文件,或者在 ...
- ASP.NET Web API实现微信公众平台开发(二)access_token与定时任务
承接上一篇,今天主要讲述如何实现定时获取微信access_token功能的实现. access_token 首先我们根据微信的开发指南,任何对微信的操作都要使用合法获取的access_token,微信 ...
- maven个人总结
一.解压maven(apache-maven-3.6.0-bin.zip) ---apache-maven-3.6.0 ---bin(Binary书写) >存放二进制可执行的文件(命令),例如m ...
- web自动化测试(java)---环境搭建
java的测试环境搭建相较于python还简单些,只要把相关的jar包导入即可了 1.安装java 从官网下载最新的java安装程序,双击安装(java1.8) 2.下载java版的selenium的 ...
- Java获取URL中的顶级域名domain的工具类
方式一: import java.net.MalformedURLException; import java.net.URL; import java.util.Arrays; import jav ...
- leetcode — integer-to-roman
/** * Source : https://oj.leetcode.com/problems/integer-to-roman/ * * Created by lverpeng on 2017/7/ ...
- 带你了解CSRF和XSS(一)
浏览器的同源策略限制了一些跨域行为,但仍有些特例(img.iframe.script标签)不受跨域限制,这就给XSS攻击创造了机会(这完全不是同源策略的锅,一定是程序员的锅). 在讲下面的内容前,还是 ...
- Java关键字(一)——instanceof
instanceof 严格来说是Java中的一个双目运算符,用来测试一个对象是否为一个类的实例,用法为: boolean result = obj instanceof Class 其中 obj 为一 ...
知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议