精读《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="小王" ...
随机推荐
- jvm莫名退出问题解决
当jvm莫名退出,没有留下任何任何信息的时候,在centos的 /var/log/dmesg文件中,或许可以找到一些端倪
- Sublime Text 3 无法使用package control安装插件解决办法
Crossing's Blog NOT Genius but Try Best 首页 分类 关于 归档 标签 问题貌似出现在liveStyle版本更新之后,因为打算安装javascript next和 ...
- css3实现图片遮罩效果鼠标hover以后出现文字
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- 经典 SQL
经典sql 总结一些经常用到或碰到的SQL语句,希望能与大家分享,同时也希望大家能提供更多的精妙SQL语句..... 1.delete table1 from (select * from tab ...
- centos yum 完全卸载依赖
centos yum 完全卸载依赖 you install a package with yum install, say pdftk, it will pull in a lot of dep ...
- javase程序设计课后题答案
;第1章 Java概述 编译java application源程序文件将产生相应的字节码文件,这些字节码文件别的扩展名为.java 执行一个java程序fristapp的方法是运行java frist ...
- 菜鸟的jQuery源码学习笔记(前言)
前言 相信任何一名前端开发人员或者是前端爱好者都对jQuery不陌生.jQuery简单易用,功能强大,特别是拥有良好的浏览器兼容性,大大降低了前端开发的难度,使得前端开发变得“平易近人起来”.自从本人 ...
- MySQL恢复备份读书笔记
1. 任何执行时间长于 wait_timeout或interactive_timeout选项值得备份,都会导致会话被关闭,这也会隐含执行UNLOCK TABLES命令.2. 对于使用FLUSH TAB ...
- C++ DLL导出函数的两种方法(导出序号那种方法,别人看不到函数名)
第一种就直接导出函数名如下代码: #ifdef__cplusplus #define TEXPORT extern "c" _declspec(dllexport) #dlse # ...
- MYSQL中limit的使用
limit是mysql的语法select * from table limit m,n其中m是指记录开始的索引,从0开始,表示第一条记录n是指从第m+1条开始,取n条.select * from ta ...