• JavaScript高级程序设计重点(一)


    1.一个完整的 JavaScript 实现应该由下列三 个不同的部分组成

    •  核心(ECMAScript)
    •  文档对象模型(DOM)
    •  浏览器对象模型(BOM)

     2.Undefined 类型只有一个值,即特殊的 undefined。在使用 var 声明变量但未对其加以初始化时, 这个变量的值就是 undefined,

    例如: var message;
    
    alert(message == undefined); //true

    3.Null 类型是第二个只有一个值的数据类型,这个特殊的值是 null。从逻辑角度来看,null 值表 示一个空对象指针,而这也正是使用 typeof 操作符检测 null 值时会返回"object"的原因,如下面 的例子所示:

    var car = null;
    
    alert(typeof car); // "object"

    4.Object 的每个实例都具有下列属性和方法。

    •  constructor:保存着用于创建当前对象的函数。对于前面的例子而言,构造函数(constructor) 就是 Object()。
    •  hasOwnProperty(propertyName):用于检查给定的属性在当前对象实例中(而不是在实例 的原型中)是否存在。其中,作为参数的属性名(propertyName)必须以字符串形式指定(例 如:o.hasOwnProperty("name"))。
    •  isPrototypeOf(object):用于检查传入的对象是否是传入对象的原型(第 5 章将讨论原 型)。
    •  propertyIsEnumerable(propertyName):用于检查给定的属性是否能够使用 for-in 语句 (本章后面将会讨论)来枚举。与 hasOwnProperty()方法一样,作为参数的属性名必须以字符 串形式指定。
    •  toLocaleString():返回对象的字符串表示,该字符串与执行环境的地区对应。
    •  toString():返回对象的字符串表示。
    •  valueOf():返回对象的字符串、数值或布尔值表示。通常与 toString()方法的返回值 相同。

    5.break 和 continue 语句用于在循环中精确地控制代码的执行。其中,break 语句会立即退出循环, 强制继续执行循环后面的语句。而 continue 语句虽然也是立即退出循环,但退出循环后会从循环的顶 部继续执行。

    6.ECMAScript 变量可能包含两种不同数据类型的值:基本类型值和引用类型值。基本类型值指的是 简单的数据段,而引用类型值指那些可能由多个值构成的对象。

    function setName(obj) {
     obj.name = "Nicholas";
     obj = new Object();
     obj.name = "Greg";
    }
    var person = new Object();
    setName(person);
    alert(person.name); //"Nicholas"

    这个例子与前一个例子的唯一区别,就是在 setName()函数中添加了两行代码:一行代码为 obj 重新定义了一个对象,另一行代码为该对象定义了一个带有不同值的 name 属性。在把 person 传递给 setName()后,其 name 属性被设置为"Nicholas"。然后,又将一个新对象赋给变量 obj,同时将其 name 属性设置为"Greg"。如果 person 是按引用传递的,那么 person 就会自动被修改为指向其 name 属性值 为"Greg"的新对象。但是,当接下来再访问 person.name 时,显示的值仍然是"Nicholas"。这说明 即使在函数内部修改了参数的值,但原始的引用仍然保持未变。实际上,当在函数内部重写 obj 时,这 个变量引用的就是一个局部对象了。而这个局部对象会在函数执行完毕后立即被销毁。

    7.要检测一个变量是不是基本数据类型?(typeof)

    var s = "Nicholas";
    var b = true;
    var i = 22;
    var u;
    var n = null;
    var o = new Object();
    alert(typeof s); //string
    alert(typeof i); //number
    alert(typeof b); //boolean
    alert(typeof u); //undefined
    alert(typeof n); //object
    alert(typeof o); //object 

    检测引用类型,它是什么类型的对象(instanceof)

    alert(person instanceof Object); // 变量 person 是 Object 吗?
    alert(colors instanceof Array); // 变量 colors 是 Array 吗?
    alert(pattern instanceof RegExp); // 变量 pattern 是 RegExp 吗?

     使用 typeof 操作符检测函数时,该操作符会返回"function"。在 Safari 5 及 之前版本和 Chrome 7 及之前版本中使用 typeof 检测正则表达式时,由于规范的原 因,这个操作符也返回"function"。ECMA-262 规定任何在内部实现[[Call]]方法 的对象都应该在应用 typeof 操作符时返回"function"。由于上述浏览器中的正则 表达式也实现了这个方法,因此对正则表达式应用 typeof 会返回"function"。在 IE 和 Firefox 中,对正则表达式应用 typeof 会返回"object"。

    8.垃圾回收机制(不建议自己调用,因为浏览器的回收机制都是经过优化和实践的->4.3.3)

    事实上,在有的浏览器中可以触发垃圾收集过程,但我们不建议读者这样做。在 IE 中,调用 window.CollectGarbage()方法会立即执行垃圾收集。在 Opera 7 及更 高版本中,调用 window.opera.collect()也会启动垃圾收集例程。

    9.栈内存OR堆内存详解->https://blog.csdn.net/xdd19910505/article/details/41900693

    10.变量、作用域和内存的一些问题总结

      JavaScript 变量可以用来保存两种类型的值:基本类型值和引用类型值。基本类型的值源自以下 5 种基本数据类型:Undefined、Null、Boolean、Number 和 String。基本类型值和引用类型值具 有以下特点:

    •  基本类型值在内存中占据固定大小的空间,因此被保存在栈内存中;
    •  从一个变量向另一个变量复制基本类型的值,会创建这个值的一个副本;
    •  引用类型的值是对象,保存在堆内存中;
    •  包含引用类型值的变量实际上包含的并不是对象本身,而是一个指向该对象的指针;
    •  从一个变量向另一个变量复制引用类型的值,复制的其实是指针,因此两个变量最终都指向同 一个对象;
    •  确定一个值是哪种基本类型可以使用 typeof 操作符,而确定一个值是哪种引用类型可以使用 instanceof 操作符。 所有变量(包括基本类型和引用类型)都存在于一个执行环境(也称为作用域)当中,这个执 行环境决定了变量的生命周期,以及哪一部分代码可以访问其中的变量。以下是关于执行环境的几 点总结:
    •  执行环境有全局执行环境(也称为全局环境)和函数执行环境之分;
    •  每次进入一个新执行环境,都会创建一个用于搜索变量和函数的作用域链;
    •  函数的局部环境不仅有权访问函数作用域中的变量,而且有权访问其包含(父)环境,乃至全 局环境;  全局环境只能访问在全局环境中定义的变量和函数,而不能直接访问局部环境中的任何数据;
    •  变量的执行环境有助于确定应该何时释放内存。 JavaScript 是一门具有自动垃圾收集机制的编程语言,开发人员不必关心内存分配和回收问题。可 以对 JavaScript 的垃圾收集例程作如下总结。
    •  离开作用域的值将被自动标记为可以回收,因此将在垃圾收集期间被删除。
    •  “标记清除”是目前主流的垃圾收集算法,这种算法的思想是给当前不使用的值加上标记,然 后再回收其内存。
    •  另一种垃圾收集算法是“引用计数”,这种算法的思想是跟踪记录所有值被引用的次数。JavaScript 引擎目前都不再使用这种算法;但在 IE 中访问非原生 JavaScript 对象(如 DOM 元素)时,这种 算法仍然可能会导致问题。
    •  当代码中存在循环引用现象时,“引用计数”算法就会导致问题。
    •  解除变量的引用不仅有助于消除循环引用现象,而且对垃圾收集也有好处。为了确保有效地回 收内存,应该及时解除不再使用的全局对象、全局对象属性以及循环引用变量的引用。
  • 相关阅读:
    消息推送之百度云推送Android集成与用法
    编程算法
    leetcode_Jump Game
    使用UIScrollView和UIPageControl做一个能够用手势来切换图片的效果
    Django 介绍、安装配置、基本使用、Django 用户注冊样例
    windows下mysql5.6.20使用mysqldumpslow.pl分析慢日志
    Flex布局 Flexbox属性具体解释
    php 在同一个表单中加入和改动
    Leetcode:remove_element
    java_oop_关键字
  • 原文地址:https://www.cnblogs.com/qiuzhimutou/p/8881355.html
Copyright © 2020-2023  润新知