您的位置:首页 > Web前端 > JavaScript

Javascript学习日志 (二) 变量、作用、内存问题

2012-12-14 12:09 609 查看
1 历史

  1995年2月, Netscape开发了一种名为Livescript的脚本语言,为了赶上Java的热潮被Netscape将其改名为Javascript。

  1997年,完成了ECMAScript标准化脚本语言。

2 javascript实现

  ECMAScript只是Javascript的一部分,之外Javascript还包括DOM和BOM。



  ECMAScript重要版本更新说明:

ECMA-262 V3:此版本的发布标志着ECMAScript成为了一门真正的编程语言,其更新主要涉及了字符串处理、错误定义和数值输出,之外还新增了对正则表达式、新控制语句、try-catch异常处理的支持。

ECMA-262 V4:新增了强类型变量、新语句和数据结构、真正的类和经典继承,并且还定义了与数据交互的新方式

ECMA-262 V5:提供了属性存取、反射创建、对象检测、属性的程序控制、附加的数组处理函数、JSON对象的编码与解码和严格模式下提供的errors检查和程序安全。

3 DOM(文档对象模型)

  DOM是针对XML但经过扩展用于HTML的应用程序编程接口。由W3C为了解决浏览器兼容性而规划。

3.1 DOM级别

  DOM Level1 由以下两个模块组成:

DOM核心:规定了如何映射基于XML的文档结构,以便简化对文档中任意部分的访问与操作;

DOM HTML:在DOM核心的基础上,添加了针对HTML的对象与方法。

  DOM Level2 添加了以下新模块:

DOM视图:定义了跟踪不同文档视图的接口;

DOM事件:定义了事件和事件处理接口;

DOM样式:定义了基于CSS为元素应用样式的接口;

DOM遍历和范围:定义了遍历和操作文档树的接口。

  DOM Level3 基于Level2进行了以下扩展:

引入了统一方式加载和保存文档的方法(DOM加载和保存模块中定义);

新增了验证文档的方法(DOM验证模块中定义);

开始支持XML1.0规范,涉及内容有:XML Infoset、XPath和XML Base。

4 BOM(浏览器对象模型)

  BOM提供与浏览器交互的方法和接口。以下是Javascript的扩展,被当做BOM的一部分:

弹出新浏览器窗口的功能;

移动、缩放和关闭浏览器窗口的功能;

提供浏览器详细信息的navigator对象;

提供浏览器所加载页面的详细信息的location对象;

提供用户显示器分辨率详细信息的screen对象;

对cookies的支持;

像XMLHttpRequest和IE的ActiveXObject这样的自定义对象。

5 HTML中使用javascript需要注意的地方

5.1 <script>标签中async和defer属性的使用

async:当此属性被使用时(async="async"),表示js脚本文件的下载和执行不会影响页面的加载与显示,在这种情况下执行的js脚本文件不要在加载期间修改DOM内容,如果有多个js被此属性标记,这些文件的不一定会按照既定的顺序执行。

defer:使用该属性(defer="defer"),表示js脚本文件只下载但不执行,直到页面执行完</html>之后再执行该脚本文件,如果有多个js文件被此属性标记,这些文件会按照既定的执行顺序执行。

5.2 js代码的嵌入和外部js文件的引用

  推荐使用外部文件的引用,因为外部文件可以被缓存,可以加快页面加载速度,并且由于外部文件相对独立,其维护性较好,也适应未来的发展趋势。

5.3 文档模式

  文档模式主要有:混杂模式(quirks mode)和标准模式(standards mode),后来IE也推出了什么准标准模式,和标准模式相差不多。文档在默认情况下为混杂模式,推荐手动指定文档模式为标准模式,其开启方式如下:

<!-- HTML 4.01 严格型 -->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">

<!-- XHTML 1.0 严格型 -->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<!-- HTML 5 -->
<!DOCTYPE html>

5.4 <noscript>标签
  <noscript>标签在浏览器不支持脚本或者脚本被禁用的情况下使用,在此两种情况下<noscript>中的内容会被显示出来,如果浏览器支持脚本,且脚本未被禁用时<noscript>中的内容会被忽略掉。

6 基本概念

6.1 语法

区分大小写;

标识符由字母、下划线(_)、美元符号($)或数字组成,并且第一个字符必须是字母、下划线或一个美元符号(PHP中变量$var);

推荐使用驼峰书写格式;

注释:// 或 /**/

启用严格模式:

function doSometing() {
"use strict";
// 函数体
}


6.2 变量
  推荐先定义,且初始化再使用,尽量保持前后变量使用时类型统一。用var定义的为局部变量,在作用范围外使用无效,直接使用的变量会被定义为全局变量。

6.3 数据类型
  6中数据类型分别为:Undefined、Null、Boolean、Number、String、Object(本质上由一组无序的名值对组成)。

  typeof操作符:

typeof(Undefined):"undefined",变量未定义;

typeof(Boolean):"boolean";

typeof(Number):"number", 其他进制都会转换成十进制参与计算,八进制在严格模式下无效,数值范围 (Number.MAX_VALUE/MIN_VALUE,Infinity,-Infinity, Number.NEGATIVE_INFINITY,Number.POSITIVE_INFINITY);

typeof(String):"string";

typeof(Null/Object):"Object",如果值为函数则返回:"function";

6.4 与6中数据类型相关的常见接口

isNaN(obj),判断obj是否为非数字,isNaN执行过程中会通过valueOf()和toString()函数来进一步确认obj的内容;

Number(),boolean->0/1,null->0,undefined->NaN,string(空串->0,NaN,对象->valueOf->toString->number);

parseInt(obj[, n]),第一个非数字或'-' -> NaN,空串-> NaN,第一个为数字->转换直至遇到非数字结束,0xN->16进制,0N->八进制,如果指定n,表示要转换到n进制。

6.5 Object类型

  创建新对象:

  var obj = new Object();Object()构造函数,如果是没有参数的构造函数可以将"()"省略掉直接使用 var obj = new Object;创建新对象。

  Object实例的属性和方法:

constructor:保存了用于创建当前对象的函数,如Object();

hasOwnProperty(propertyName):检查属性是否在对象中存在,propertyName必须以字符串形式存在;

isPrototyoeOf(object):检查传入的对象是否为传入对象的原型??(同一类??);

propertyIsEnumerable(propertyName):检查给定的属性是否能够使用for-in语句类枚举;

toLocalString():返回对象的字符串表示,结果与执行环境的地区对应;

toString():返回对象的字符串表示;

valueOf:返回对象的字符串、数值、布尔值表示,通常与toString()返回值相同。

6.6 操作符

  乘法:

  number * number = number/Infinity/-Infinity;

  obj * NaN = NaN;

  Infinity * 0 = NaN;

  Infinity * ~0 = Infinity/-Infinity;

  Infinity * Infinity = Infinity;

  除法:

  number / number = number/Infinity/-Infinity;

  obj / NaN, NaN/obj = NaN;

  Infinity / Infinity = NaN;

  0/0 = NaN;

  0/number = Infinity/-Infinity;

  ~0/Infinity = Infinity/-Infinity;

  全等于不全等("==" 和 "==="):

  "==" 在经过转换之后相等则相等;

  "===" 在不经过转换相等则相等;

  逗号操作符:

  总是返回表达式中的最后一项;

  for-in语句:迭代语句,用来枚举对象的属性:

  for (property in expression) statement;

  label语句:添加标签, 一般与for等其他的循环语句配合使用;

  with语句:将代码的作用域设置到一个特定的对象中,严格模式下使用时会报错,因此不推荐使用。

var a = location.s.substring();
var b = location.hostname;

with(location) {
var a = s.substring();
var b = hostname;
}


6.7 函数

  function f([var1, var2, ...]) {

    // contents

  }

  对函数的一些限制:

函数名不能为:eval/arguments;

参数名不能为:eval/arguments;

参数名不可同名。

   arguments对象用来访问参数数组,这个数组用来接收并保存传入的参数,可以通过使用下标来访问传入的参数:arguments[0] -> var1, arguments[1] -> var2, ...,不可赋值,可以通过arguments.length来获取参数个数,arguments中的值始终与对应的参数值保持一致!!!!!;

  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: