精读《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="小王" ...
随机推荐
- Linux学习1——首次登录
一.写在前面 在本节将介绍首次登录Linux系统(本文中为CentOS)所需要了解的一些基本操作.二.完成目标 1.了解GNOME和KDE窗口管理程序 2.使用在线求助man和info 3.基本命令操 ...
- asp.net 跨页面传值常用方法
常用方法有以下: 1.queryString 2.form-post控件传递 3.cookie 4.application 5.session querystring: http://website. ...
- 根据树父子ID拼接无限极树结构表的名称
declare @c varchar(50)set @c='572a3d51-ef7a-459e-a5cd-ebf0fca51e8b' --能查出来呀 你试试,我试一下,好像可以啦谢谢 declare ...
- MongoDB 操作
通过CMD命令操作数据 确保MongoDB的服务已经正常安装,记下安装目录(D:\MongoDB\Service) 然后打开cmd 先转到D盘 cd D: 然后转到服务的安装目录下 cd D:\Mon ...
- Sql Server数据库设计高级查询
-------------------------------------第一章 数据库的设计------------------------------------- 软件开发周期: (1 ...
- bootstrap之noConflict的详解
翻开推特框架,不经发现,几乎所有的插件都会出现noConflict的写法来防止和其他的插件冲突!我们以button.js为例子,打开其源代码发现 如下: var old = $.fn.button $ ...
- python 学习day5(模块)
一.模块介绍 模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能 ...
- Spring 3.x企业实用开发实战(1)
有关Spring的介绍这里就不赘述了,主要是学习了陈雄华版的<Spring 3.x企业应用开发实战>并做了一点笔记,以助于后期的回顾和复习. 废话不多说,直接进入主题,以下所有代码基于&l ...
- Dynamics CRM 2013 初体验(5):Business Rule
新系统中的Business Rule是个不错的功能,相信它的出现能减少大量的开发工作.在日常开发中,我们需要对记录做大量的业务控制.比如:某字段是否要隐藏,某字段的值是否符合要求以及现实提醒信息等.在 ...
- Windows下让Git记住用户名密码(https)
最近开始跟老板共同维护公司的框架代码,于是毫不犹豫地选择了Git这个驰名的版本控制系统(公司使用的是TFS,但外网访问老是断线). 选择的托管平台是OSChina,原因是其可以新建私有项目. 在拉取和 ...