变量、作用域和内存问题

  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. asp.net 页面跳转的方法

    目前知道有4种: 1超链接 2.response.redirect("urlString") 3.server.transfer("urlString") 4. ...

  2. querySelectorAll

    <!DOCTYPE html><html><body> <div id="query">第一个</div> <di ...

  3. win server 2003 将MBR转为GPT突破硬盘2TB的限制(附微软磁盘科普)

    备注:https://technet.microsoft.com/zh-cn/library/cc773223.aspx GUID 分区表 与支持最大卷为 2 TB (terabytes) 并且每个磁 ...

  4. 记一次dedeCMS网站搭建全过程

    Step 1 使用阿里云Windows Server 2012服务器 { 使用远程桌面进行操作,ip admin pwd登录 } Step 2 下载安装phpStudy包 { 下载安装,直接安装到C盘 ...

  5. 多线程并发编程之显示锁ReentrantLock和读写锁

    在Java5.0之前,只有synchronized(内置锁)和volatile. Java5.0后引入了显示锁ReentrantLock. ReentrantLock概况 ReentrantLock是 ...

  6. View的滑动冲突

    一.常见的滑动冲突 场景1:外部滑动和内部滑动不一致 场景2:外部滑动和内部滑动一致 场景3:上面两种情况的嵌套 二.滑动冲突的处理方法 场景一:根据水平滑动还是竖直滑动判断到底由谁来拦截事件. 场景 ...

  7. Python urllib和urllib2模块学习(一)

    (参考资料:现代魔法学院 http://www.nowamagic.net/academy/detail/1302803) Python标准库中有许多实用的工具类,但是在具体使用时,标准库文档上对使用 ...

  8. 重启VirtualBox里面的系统提示VT-x features locked or unavailable in MSR错误

    有次不小心设置了一下virtualbox里面的一些配置,然后启动系统时出现了如下提示 在网上找了一些资料尝试了一些方法偶然有一次成功 原来是自己把那个cpu个数设置成了2,改成1就好了,不知道为什么做 ...

  9. CC++初学者编程教程(8) VS2013配置编程助手与QT

    1. 2. 配置编程助手 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26 ...

  10. ubuntu texlive 中文的配置方法

    \documentclass[12pt]{article} \usepackage{CJKutf8} \usepackage{indentfirst}%设置第一段缩进,英语中从第二段才有缩进 \use ...