变量、作用域和内存问题

  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. JavaScript经典代码总结

    1. oncontextmenu="window.event.returnvalue=false" 将彻底屏蔽鼠标右键<table border oncontextmenu= ...

  2. sql生成20位数随机数

    declare @rnd nvarchar(50)set @rnd =''while LEN(@rnd)<20 begin set @rnd =@rnd + REPLACE ( CONVERT( ...

  3. L9-2.安装mysql数据库

    二.安装mysql 1.检查是否安装了mysql 2.安装cmake 输入gmake: make install 安装依赖的软件包: 新建用户权限等: 解压 安装 安装: 安装成功. 安装后调整: v ...

  4. IOS支付宝支付出现6002问题的解决办法

    运行支付宝官方demo进行支付测试,会出现6002-网络连接错误,是因为以iOS9 SDK编译的工程会默认以SSL安全协议进行网络传输,即HTTPS,如果依然使用HTTP协议请求网络会报系统异常并中断 ...

  5. UIButton, KVC, KVO

    按钮 自定义按钮:调整内部子控件的frame 方式1:实现titleRectForContentRect:和imageRectForContentRect:方法,分别返回titleLabel和imag ...

  6. sql server sys.object表字段说明

    列名 数据类型 说明 name sysname 对象名. object_id int 对象标识号. 在数据库中是唯一的. principal_id int 如果不是架构所有者,则为单个所有者的 ID. ...

  7. 使用PowerShell管理Windows8应用

    引子(?): 我从消费者预览版开始使用的win8,大概是因为我年龄不大的缘故,我很快熟悉了这个操作系统并习惯了使用windows8的Modern App.我之前使用过一个叫Windows8 Moder ...

  8. LeetCode之ReverseWorldString

    题目:将一个英文句子翻转,比如:the sky is blue 翻转后变为:blue is sky the 分析:我的实现方法是,利用栈将单词存储起来,然后再顺序拿出来,单词进栈还需注意添加空格. 主 ...

  9. Java Notes 00 - Singleton Pattern(单例总结)

    转:http://hukai.me/java-notes-singleton-pattern/ 这里不赘述单例模式的概念了,直接演示几种不同的实现方式. 0)Eager initialization ...

  10. 1016. 部分A+B

    /* * Main.c * 1016. 部分A+B * Created on: 2014年8月30日 * Author: Boomkeeper *******测试通过********* */ #inc ...