精读《javascript高级程序设计》笔记二——变量、作用域、内存以及引用类型
变量、作用域和内存问题
- 执行环境共有两种类型——全局和局部
- 作用域链会加长,有两种情况:try-catch语句的catch块,with语句.
- javascript没有块级作用域,即在if,for循环中的变量,在块结束后,并不会被销毁.
- 最好能手工断开原生javascript对象与DOM元素之间的连接。
Object类型
- 创建Object实例有两种方式:new 操作符后跟Object构造函数即new Object(),对象字面量表示法即用{}表示。
- 可使作方括号表示法来访问对象的属性,将要访问的属性以字符串的形式放到方括号内。
- 方括号访问对象的属性,可以通过变量来访问
var propertyName = "name"; alert(person[propertyName]);
属性名包含会导致语法错误的字符,也可以使用方括号
Array类型
- 创建Object实例有两种方式:new 操作符后跟Array构造函数即new Object(),对象字面量表示法即用[]表示。
- 与对象相同,调用字面量的方式来创建数组时,不会调用数组的构造函数
- 检测数组:value instanceof Array
- Array.isArray(value)支持IE9+……
- 数组的toString()方法返回数组每个值字符串形式拼接而成的一个以逗号为字符串分隔的字符串;调用valueOf()返回的还是数组
- 用push()和pop()来模拟栈方法,用push()和shift()来模拟队列方法
- concat()方法,会创建一个副本,将接收到的参数添加到副本的末尾,原数组并没有进行改变
- slice()接收一个参数,返回从指定位置至末尾的所有项,如果两个参数,返回指定开始位置至结束位置的项,不包括结束位置。另外slice()方法同样不会影响原数组.
- splice()方法
删除 2个参数 要删除第一项位置,要删除项数,例splice(0,2) 插入 3+个参数 起始位置,0(要删除项数),要插入的项,例splice(2,0,"red","yellow") 替换 3+个参数 起始位置,要删除项数,要插入的项,例splice(2,1,"red","yellow") - 迭代方法
every() 对数组的每一项运行给定函数,如果每一项都返回true,则返回true filter() 对数组的每一项运行给定函数,返回该函数会返回true的项组成的数组 forEach() 对数组的每一项运行给定函数,该函数没有返回值 map() 对数组的每一项运行给定函数,返回每次调用结果返回的数组 some() 对数组的每一项运行给定函数,如果该函数对任一项返回true,则返回true 支持迭代方法需IE9+
- 缩小方法values.reduce(function(prev,cur,index,array){});同样需IE 9+
Date类型
- UTC创建的时间:var allFives = new Date(Date.UTC(2005,4,5,17,55,55,55)),本来按书中说的,应当是2005年5月5日下午5点55分55秒,但我运行时的时间是2005年5月6日1点55分55秒,原因是我所在的时区为东8区,又加了8时
- var allFives = new Date(2005,4,5,17,55,55,55);创建的时间可以得到对应的结果。
- Date.now()支持的浏览器为IE9+
- 在不支持now()方法的浏览器中,可用如下方法统计两段代码之间所用时间
var start = +new Date();
doSomething……
var end = +new Date();
console.log(end-start); - 日期格式化方法
toDateString() 以特定于现实的时间格式显示星期几、月、日、年 toTimeString() 以特定于现实的时间格式显示时、分、秒、时区 toLocaleDateString() 以特定于地区的时间格式显示星期几、月、日、年 toLocaleTimeString() 以特定于现实的时间格式显示时、分、秒 toUTCString() 以特定于现实的格式完整的UTC日期
正则表达式
- 正则表达式:var expression = /pattern/flags;
- flags有三种:g是全局,i表不区分大小写,m表示多行匹配
- RegExp实例属性
global 布尔值,是否设定g标志 ignoreCase 布尔值,是否设定i标志 lastIndex 整数,表示开始搜索下一个匹配项的字符位置,从0算起 multiline 布尔值,是否设定m标志 source 正则表达式的字符串表示,按照字面量形式而非传入构造函数中的字符模式返回 - 正则表达式构造函数属性
长属性名 短属性名 说明 input $_ 最近一次要匹配的字符串,Opera未实现 lastMatch $& 最近一次的匹配项,Opera未实现 lastParen $+ 最近一次匹配的捕获组,Opera未实现 leftContext $` input字符串中lastMatch之前的文本 multiline $* 布尔值,表示是否使用多行模式,IE和Opera都未实现 rightContext $' input字符串中lastMatch之后的文本 - 正则表达式的方法var matches = pattern.exec(text)【返回结果集】和 pattern.test(text)【返回true 、false】。
- String类型的text.match(pattern)方法与pattern.exec(text)相同
Function类型
- arguments.callee()即调用当前函数,严格模式不支持该方法
- this引用的时函数据以执行的函数对象
- caller这个函数保存着调用当前函数的引用,如果是在全局变量中调用当前函数,返回为null
- 每个函数都包含两个属性:length和prototype,其中length表示希望接收的命名参数的个数
String类型
- replace()方法的第二个参数可以是一个函数,在只有一个匹配项的情况下,会传递三个参数:模式的匹配项、模式匹配在字符串中的位置和原始字符串
function htmlEscape(text){
return text.replace(/[<>"&]/g,function(match,pos,originalText){
switch(match){
case "<":
return "<";
case ">":
return ">";
case "&":
return "&";
case "\"":
return """;
}
});
} - 字符串与匹配模式相关的几个方法有:match(),search(),replace(),split()都可以传入正则表达式.
Math对象
- 求近似值的方法:ceil(),round(),floor()
- 从某个整数范围内随机选择一个值的方法: 值 = Math.floor(Math.random()*可能值的总数+第一个可能值)
精读《javascript高级程序设计》笔记二——变量、作用域、内存以及引用类型的更多相关文章
- javascript 高级程序设计 十二
1.组合使用原型模式和构造函数模式: 由于原型模式创建对象也有它的局限性------有智慧的人就把原型模式和构造函数模式进行了组合. function Person(name, age, job){/ ...
- 《JavaScript 高级程序设计》读书笔记四 变量 作用域 内存
一 变量(基本类型和引用类型) a.基本类型保存值,保存在栈内存,引用类型保存指针,保存在堆内存: b.所有函数的参数都是按值进行传递的,不管参数是何种类型: c.检测类型 typeof ...
- Javascript高级程序设计——执行环境与作用域
Javascript中执行环境是定义了变量或函数有权访问的其他数据,决定了各自的行为,每个执行的环境都有一个与之关联的变量对象,环境中定义的所以变量和函数都保存在这个对象中. 全局执行环境是最外围的一 ...
- javascript高级程序设计--笔记01
概述 JavaScript的实现包含三个部分: 1 核心(ECMAScript) 提供核心语言功能 2 文档对象模型(DOM) 一套提供了访问以及操作网页内容的API 3 浏览器对象模型( ...
- JavaScript高级程序设计笔记(一)
---恢复内容开始--- 前三章为基础知识,为了方便以后查看,所以比较啰嗦.这里对函数的基本操作没有记录. 1.JavaScript的实现 虽然 JavaScript 和 ECMAScript 通常都 ...
- JavaScript高级程序设计学习(二)之基本概念
任何语言的核心都必然会描述这门语言基本的工作原理.而描述的内容通常都要涉及这门语 言的语法.操作符.数据类型.内置功能等用于构建复杂解决方案的基本概念.如前所述, ECMA-262通过叫做 ECMAS ...
- JavaScript高级程序设计笔记之面向对象
说起面向对象,大部分程序员首先会想到 类 .通过类可以创建许多具有共同属性以及方法的实例或者说对象.但是JavaScript并没有类的概念,而且在JavaScript中几乎一切皆对象,问题来了,Jav ...
- javascript事件小结(事件处理程序方式)--javascript高级程序设计笔记
1.事件流:描述的是从页面中接收事件的顺序. 2.事件冒泡:IE的事件流叫做事件冒泡,即事件开始从具体的元素(文档中嵌套层次最深的那个节点)接收,然后逐级向上传播到不具体的节点(文档). 3.事件捕获 ...
- 读书时间《JavaScript高级程序设计》二:面向对象
接着上次的进度,开始看第6章. 第6章 面向对象的程序设计 理解对象 创建自定义对象最简单的方式就是创建一个 Object 的实例,然后为它添加属性和方法. var person = new Obje ...
- Javascript高级程序设计笔记 <第五章> 引用类型
一.object类型 创建object实例的方式有两种: //第一种使用new操作符跟构造函数 var person= new Object(); person.name="小王" ...
随机推荐
- js事件的相关收集
1.阻止事件冒泡: IE:cancelBubble = true; 其他: stopPropagation(); 2.阻止事件的默认行为: IE: returnValue = false; 其他: p ...
- iOS8毛玻璃效果
UIBlurEffect*blueEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight]; UIVisualEffectView* ...
- Java多线程并发编程之原子变量与非阻塞同步机制
1.非阻塞算法 非阻塞算法属于并发算法,它们可以安全地派生它们的线程,不通过锁定派生,而是通过低级的原子性的硬件原生形式 -- 例如比较和交换.非阻塞算法的设计与实现极为困难,但是它们能够提供更好的吞 ...
- css实现两端对齐的3种方法
两端对齐在移动端非常见,说到两端对齐,大家并不陌生,在word.powerpoint.outlook等界面导航处,其实都有一个两端对齐(分散对齐)的按钮,平时使用的也不多,我们更习惯与左对齐.居中对齐 ...
- Python学习笔记(三)Python的list和tuple
list list类似其他语言中的数组,是一种有序的集合,可以随时添加和删除其中的元素. 使用len()函数可以获得list元素的个数. list的索引从0开始,当超出范围时会报IndexError错 ...
- MySql的一些问题
问题1:卸载重装mysql时,报1045和2003错误. 解决:点击skip,跳过这个错误.进到my.ini,在mysqld下面加一句:skip-grant-tables,保存.重启mysql服务,在 ...
- 【自学php】第三天 - 读写文件
这次的例子是把订单的数据保存起来,一般是用数据库来进行数据的存储最好,但是今天目的是为了学习读写文件,所以这次把数据存在文件里. 读写文件有一般有三个步骤: 1)打开文件.如果文件不存在,需要先创建它 ...
- 手工制作OTG连接线 让小白实现OTG功能
说到OTG功能,很重要的一点是,现在不少网上的720P高清视频体积已经超过4GB,我的小白也支持exFat及NTFS磁盘格式,可存储播放大于4GB的高清影音文件,也能通过OTG读取播放NTFS格式U盘 ...
- 移动网络山寨版(OpenBTS)【2】频段的故事
OpenBTS 系统有两个看点.一个是无线收发,尤其是频段的处理,另一个是网络系统,尤其是替代传统的基站(BTS),基站控制器(BSC),移动控制中心(MSC),以及(HLR/VLR)的另类方案. 先 ...
- 全局键盘钩子(WH_KEYBOARD)
为了显示效果,在钩子的DLL中我们会获取挂钩函数的窗体句柄,这里的主程序窗体名为"TestMain",通过FindWindow查找. KeyBoardHook.dll代码 libr ...