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

变量、作用域和内存问题

  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()*可能值的总数+第一个可能值)
时间: 2024-10-09 20:29:17

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

javascript高级程序设计——笔记

javascript高级程序设计--笔记 基本概念 基本数据类型包括Undefined/Null/Boolean/Number和String 无须指定函数的返回值,实际上,未指定返回值的函数返回的是一个特殊的undefined值 变量.作用域和内存问题 基本类型值在内存中占据固定大小的空间,因此保存在栈内存中 引用类型的值是对象,保存在堆内存中 确定一个值是哪种基本类型用typeof,确定一个值是哪种引用用instanceof 所有变量都存在于一个执行环境当中,这个执行环境决定了变量的生命周期,

javascript高级程序设计笔记1

最近在看javascript高级程序设计,看之前觉得自己的js学得还不错,然后,看了没几页就觉得自己好像没有学过一样,这主要写写我以前不完全了解的一些知识. 首先是关于基本数据类型的,从Number开始,以前经常用parseInt来转换数值,看过书才知道,这个函数的本意是专门用于把字符串转换成数值,而且以前也不知道它具体是怎么一个转换规则.先来看看Number()函数的转换规则: 1.如果是Boolean 值,true 和false 将分别被转换为1 和0.2.如果是数字值,只是简单的传入和返回

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

Javascript中执行环境是定义了变量或函数有权访问的其他数据,决定了各自的行为,每个执行的环境都有一个与之关联的变量对象,环境中定义的所以变量和函数都保存在这个对象中. 全局执行环境是最外围的一个执行环境.全局执行环境被认为是window对象,所有全局变量和函数都作为window对象的属性和方法创建的.某个执行环境中的所有代码执行完后,该环境被销毁,保存在其中的所有变量和函数定义也随之销. 每个函数都有自己的执行环境,当执行流进入一个函数时,函数的环境就会被推入一个环境栈中,而在函数执行完

javascript高级程序设计笔记(第4章 变量、作用域和内存问题)

1. 基本类型值Undefined.Null.Boolean.Number 和 String  基本类型值的复制过程(图解) 基本类型值在内存中占据固定大小的空间,因此被保存在栈内存中;从一个变量向另一个变量复制基本类型的值,会创建这个值的一个副本; 2.引用类型值  变量对象中的变量和保存在堆中的对象(图解) 引用类型的值是对象,保存在堆内存中; 包含引用类型值的变量实际上包含的并不是对象本身,而是一个指向该对象的指针;从一个变量向另一个变量复制引用类型的值,复制的其实是指针,因此两个变量最终

【javascript高级程序设计笔记】第一章与第三章

第1章 javascript简介 1.2Javascript实现 一个完整的javascript实现由下列三个不同的部分组成 核心(ECMAScript) 提供核心语言功能 文档对象模型(DOM) 提供访问和操作网页内容的方法和接口 浏览器对象模型(BOM)提供与浏览器交互的方法和接口 ECMAScript 它规定了这门语言的下列组成部分: 语法  类型  语句  关键字 保留字 操作符 对象 ECMA-262第5版,发布于2009年. 文档对象模型(DOM) Document Object M

javascript高级程序设计笔记(第5章 引用类型)

1.Object类型 两种方式定义:对象字面量.new 两种方式访问:括号.点 2.Array类型 2.1  定义方式:new Array.数组字面量 2.2  lenght属性:可以利用它方便的想数组末尾添加元素 2.3  检测数组 instanceof isArray()方法  2.4  toString().soLocaleString().valueOf().join()方法 2.5.栈方法   push()方法:逐个添加到数组末尾,并返回修改后的数组长度 pop()方法:返回数组的最后

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

概述 JavaScript的实现包含三个部分: 1  核心(ECMAScript)   提供核心语言功能 2  文档对象模型(DOM)  一套提供了访问以及操作网页内容的API 3  浏览器对象模型(BOM)  一套提供了与浏览器交互的API ECMAScript仅仅定义了这门语言的基础,如定义了:语法.类型.语句.关键字等,实际上这门语言本身不包含输入输出定义. 而现实中,ECMAScript大多借用了某些宿主环境(如web浏览器,Node,Adobe Flash)来实现丰富的功能,这些宿主环

【javascript高级程序设计笔记】第六章OOP

忙了一段时间,加了将近一个月的班. 书也落下没看,上次看到第七章(这部分笔记大概还是9月份的吧),偶尔看到很吃力.看的速度慢下来. 学习就是一个慢慢积累慢慢沉淀的过程.看书时没有明显觉得提升.但在看完书后近段时间工作中写代码,明显感觉效率还是有提升,基础知识牢固了. 这本书是第二次看,这次很认真的遍读和做笔记,笔记的文字均是自己边看边敲的,这样才更好的真正的吸收到一部分吧! 这些天在看web响应式设计:HTML5和CSS3实战 第6章 面向对像的程序设计 6.1.1属性类型 ECMAScript

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

1. ECMA规定了这门语言的下列组成部分: 语法. 类型.语句. 关键字.保留字.操作符. 对象 2. 什么是 ECMAScript 兼容支持 ECMA描述的所有"类型.值.对象.属性.函数以及程序句法和语义"支持 Unicode 字符标准. 此外,兼容的实现还可以进行下列扩展.添加 ECMA没有描述的"更多类型.值.对象.属性和函数".支持 ECMA没有定义的"程序和正则表达式语法". 3. 5种简单数据类型: Undefined(不明确的,

javascript高级程序设计笔记(第7章 函数表达式)

7.5 小结 在JavaScript 编程中,函数表达式是一种非常有用的技术.使用函数表达式可以无须对函数命名,从而实现动态编程.匿名函数,也称为拉姆达函数,是一种使用JavaScript 函数的强大方式.以下总结了函数表达式的特点.? 函数表达式不同于函数声明.函数声明要求有名字,但函数表达式不需要.没有名字的函数表达式也叫做匿名函数.? 在无法确定如何引用函数的情况下,递归函数就会变得比较复杂:? 递归函数应该始终使用arguments.callee 来递归地调用自身,不要使用函数名——函数