变量、作用域和内存问题

  1. 执行环境共有两种类型——全局和局部
  2. 作用域链会加长,有两种情况:try-catch语句的catch块,with语句.
  3. javascript没有块级作用域,即在if,for循环中的变量,在块结束后,并不会被销毁.
  4. 最好能手工断开原生javascript对象与DOM元素之间的连接。

Object类型

  1. 创建Object实例有两种方式:new 操作符后跟Object构造函数即new Object(),对象字面量表示法即用{}表示。
  2. 可使作方括号表示法来访问对象的属性,将要访问的属性以字符串的形式放到方括号内。
  3. 方括号访问对象的属性,可以通过变量来访问

    var propertyName = "name"; alert(person[propertyName]);

    属性名包含会导致语法错误的字符,也可以使用方括号

Array类型

  1. 创建Object实例有两种方式:new 操作符后跟Array构造函数即new Object(),对象字面量表示法即用[]表示。
  2. 与对象相同,调用字面量的方式来创建数组时,不会调用数组的构造函数
  3. 检测数组:value instanceof Array
  4. Array.isArray(value)支持IE9+……
  5. 数组的toString()方法返回数组每个值字符串形式拼接而成的一个以逗号为字符串分隔的字符串;调用valueOf()返回的还是数组
  6. 用push()和pop()来模拟栈方法,用push()和shift()来模拟队列方法
  7. concat()方法,会创建一个副本,将接收到的参数添加到副本的末尾,原数组并没有进行改变
  8. slice()接收一个参数,返回从指定位置至末尾的所有项,如果两个参数,返回指定开始位置至结束位置的项,不包括结束位置。另外slice()方法同样不会影响原数组.
  9. splice()方法
    删除 2个参数 要删除第一项位置,要删除项数,例splice(0,2)
    插入 3+个参数 起始位置,0(要删除项数),要插入的项,例splice(2,0,"red","yellow")
    替换 3+个参数 起始位置,要删除项数,要插入的项,例splice(2,1,"red","yellow")
  10. 迭代方法
    every() 对数组的每一项运行给定函数,如果每一项都返回true,则返回true
    filter() 对数组的每一项运行给定函数,返回该函数会返回true的项组成的数组
    forEach() 对数组的每一项运行给定函数,该函数没有返回值
    map() 对数组的每一项运行给定函数,返回每次调用结果返回的数组
    some() 对数组的每一项运行给定函数,如果该函数对任一项返回true,则返回true

    支持迭代方法需IE9+

  11. 缩小方法values.reduce(function(prev,cur,index,array){});同样需IE 9+

Date类型

  1. 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时
  2. var allFives = new Date(2005,4,5,17,55,55,55);创建的时间可以得到对应的结果。
  3. Date.now()支持的浏览器为IE9+
  4. 在不支持now()方法的浏览器中,可用如下方法统计两段代码之间所用时间
                	var start = +new Date();
    doSomething……
    var end = +new Date();
    console.log(end-start);
  5. 日期格式化方法
    toDateString() 以特定于现实的时间格式显示星期几、月、日、年
    toTimeString() 以特定于现实的时间格式显示时、分、秒、时区
    toLocaleDateString() 以特定于地区的时间格式显示星期几、月、日、年
    toLocaleTimeString() 以特定于现实的时间格式显示时、分、秒
    toUTCString() 以特定于现实的格式完整的UTC日期

正则表达式

  1. 正则表达式:var expression = /pattern/flags;
  2. flags有三种:g是全局,i表不区分大小写,m表示多行匹配
  3. RegExp实例属性
    global 布尔值,是否设定g标志
    ignoreCase 布尔值,是否设定i标志
    lastIndex 整数,表示开始搜索下一个匹配项的字符位置,从0算起
    multiline 布尔值,是否设定m标志
    source 正则表达式的字符串表示,按照字面量形式而非传入构造函数中的字符模式返回
  4. 正则表达式构造函数属性
    长属性名 短属性名 说明
    input $_ 最近一次要匹配的字符串,Opera未实现
    lastMatch $& 最近一次的匹配项,Opera未实现
    lastParen $+ 最近一次匹配的捕获组,Opera未实现
    leftContext $` input字符串中lastMatch之前的文本
    multiline $* 布尔值,表示是否使用多行模式,IE和Opera都未实现
    rightContext $' input字符串中lastMatch之后的文本
  5. 正则表达式的方法var matches = pattern.exec(text)【返回结果集】和 pattern.test(text)【返回true 、false】。
  6. String类型的text.match(pattern)方法与pattern.exec(text)相同

Function类型

  1. arguments.callee()即调用当前函数,严格模式不支持该方法
  2. this引用的时函数据以执行的函数对象
  3. caller这个函数保存着调用当前函数的引用,如果是在全局变量中调用当前函数,返回为null
  4. 每个函数都包含两个属性:length和prototype,其中length表示希望接收的命名参数的个数

String类型

  1. replace()方法的第二个参数可以是一个函数,在只有一个匹配项的情况下,会传递三个参数:模式的匹配项、模式匹配在字符串中的位置和原始字符串

                	function htmlEscape(text){
    return text.replace(/[<>"&]/g,function(match,pos,originalText){
    switch(match){
    case "<":
    return "<";
    case ">":
    return ">";
    case "&":
    return "&";
    case "\"":
    return """;
    }
    });
    }
  2. 字符串与匹配模式相关的几个方法有:match(),search(),replace(),split()都可以传入正则表达式.

Math对象

  1. 求近似值的方法:ceil(),round(),floor()
  2. 从某个整数范围内随机选择一个值的方法: 值 = Math.floor(Math.random()*可能值的总数+第一个可能值)

精读《javascript高级程序设计》笔记二——变量、作用域、内存以及引用类型的更多相关文章

  1. javascript 高级程序设计 十二

    1.组合使用原型模式和构造函数模式: 由于原型模式创建对象也有它的局限性------有智慧的人就把原型模式和构造函数模式进行了组合. function Person(name, age, job){/ ...

  2. 《JavaScript 高级程序设计》读书笔记四 变量 作用域 内存

    一   变量(基本类型和引用类型) a.基本类型保存值,保存在栈内存,引用类型保存指针,保存在堆内存: b.所有函数的参数都是按值进行传递的,不管参数是何种类型: c.检测类型 typeof     ...

  3. Javascript高级程序设计——执行环境与作用域

    Javascript中执行环境是定义了变量或函数有权访问的其他数据,决定了各自的行为,每个执行的环境都有一个与之关联的变量对象,环境中定义的所以变量和函数都保存在这个对象中. 全局执行环境是最外围的一 ...

  4. javascript高级程序设计--笔记01

    概述 JavaScript的实现包含三个部分: 1  核心(ECMAScript)   提供核心语言功能 2  文档对象模型(DOM)  一套提供了访问以及操作网页内容的API 3  浏览器对象模型( ...

  5. JavaScript高级程序设计笔记(一)

    ---恢复内容开始--- 前三章为基础知识,为了方便以后查看,所以比较啰嗦.这里对函数的基本操作没有记录. 1.JavaScript的实现 虽然 JavaScript 和 ECMAScript 通常都 ...

  6. JavaScript高级程序设计学习(二)之基本概念

    任何语言的核心都必然会描述这门语言基本的工作原理.而描述的内容通常都要涉及这门语 言的语法.操作符.数据类型.内置功能等用于构建复杂解决方案的基本概念.如前所述, ECMA-262通过叫做 ECMAS ...

  7. JavaScript高级程序设计笔记之面向对象

    说起面向对象,大部分程序员首先会想到 类 .通过类可以创建许多具有共同属性以及方法的实例或者说对象.但是JavaScript并没有类的概念,而且在JavaScript中几乎一切皆对象,问题来了,Jav ...

  8. javascript事件小结(事件处理程序方式)--javascript高级程序设计笔记

    1.事件流:描述的是从页面中接收事件的顺序. 2.事件冒泡:IE的事件流叫做事件冒泡,即事件开始从具体的元素(文档中嵌套层次最深的那个节点)接收,然后逐级向上传播到不具体的节点(文档). 3.事件捕获 ...

  9. 读书时间《JavaScript高级程序设计》二:面向对象

    接着上次的进度,开始看第6章. 第6章 面向对象的程序设计 理解对象 创建自定义对象最简单的方式就是创建一个 Object 的实例,然后为它添加属性和方法. var person = new Obje ...

  10. Javascript高级程序设计笔记 <第五章> 引用类型

    一.object类型 创建object实例的方式有两种: //第一种使用new操作符跟构造函数 var person= new Object(); person.name="小王" ...

随机推荐

  1. DSOframer 的简单介绍和资源整理

    DSOframer 是微软提供一款开源的用于在线编辑 Word. Excel .PowerPoint 的 ActiveX 控件.国内很多著名的 OA 中间件,电子印章,签名留痕等大多数是依此改进而来的 ...

  2. HTML 4.01 符号实体

    HTML 4.01 符号实体 http://www.w3school.com.cn/tags/html_ref_symbols.html

  3. MS sqlserver 获取某月某年的天数

    --定义传入时间 ) set @datetime='2012-02-01' --定义月的天数 declare @dayCountM int --定义年的天数 declare @dayCountY in ...

  4. HDU 1020 Encoding POJ 3438 Look and Say

    Encoding Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Su ...

  5. C# 封装 System.Data.SQLite

    参考1: 关于如何使用System.Data.SQLite的入门: http://www.dreamincode.net/forums/topic/157830-using-sqlite-with-c ...

  6. 点击后改变css属性

    在html中: <div class="formbuilder">    <div class="active">Heading< ...

  7. JNDI support differences between Tibco EMS and ActiveMQ

    Introduction Recently our team was working on Veracity Quick Start sprint, when I was trying to migr ...

  8. POJ——多项式的加法

    1:多项式加法 查看 提交 统计 提问 总时间限制:  1000ms  内存限制:  5000kB 描述 我们经常遇到两多项式相加的情况,在这里,我们就需要用程序来模拟实现把两个多项式相加到一起.首先 ...

  9. 复旦大学EWP菁英女性课程(复旦卓越女性课程改版后第一期) _复旦大学、女性课程、高级研修班、心理学、EWP_培训通课程

    复旦大学EWP菁英女性课程(复旦卓越女性课程改版后第一期) _复旦大学.女性课程.高级研修班.心理学.EWP_培训通课程 复旦大学EWP菁英女性课程(复旦卓越女性课程改版后第一期)    学      ...

  10. Android 给Button加个监听

    1.日期设置控件:DatePickerDialog 2.时间设置控件:TimePickerDialog 实例代码 1.页面添加两个Button,单击分别显示日期设置控件和时间设置控件,还是有TextV ...