1. 变量

javascript中的变量是松散型,可以用来保存任何类型的数据。

用var操作符定义的变量将成为定义该变量的作用域中的局部变量。

省略var操作符后可以创建一个全局变量。(不推荐)

可以使用一条语句定义多个变量:

var message = "hi",
    found = false;
    age = 26;

 

2. 数据类型

简单数据类型:undefined, Null, Boolean, Number, String.

复杂数据类型:Object。 Object本质上是由一组无序的名值对组成的。

 

  • typeof 检测给定变量的数据类型,是一个操作符而不是函数
  • Undefined 包含undefined值得变量与尚未定义的变量不一样:
var message;
alert(message); //undefined
alert(age);       // 发生错误
  • Null 如果定义的变量准备在将来用于保存对象,那么最好将该变量初始化为null而不是其它值。
  • Boolean 该类型只有两个字面值:true和false。虽然字面值只有两个,但可以对任何数据类型的值调用Boolean函数,就会返回一个Boolean值。

转化为true的:

  Boolean(任何非空字符串)

  Boolean(任何非零数字值)

  Boolean(任何对象)

转化为false的:

  Boolean("")

  Boolean(0 和 NaN)

  Boolean(null)

  Boolean(undifined)

  • Number

Number采用的是IEEE 754 64位双精度浮点数编码。

八进制字面值的第一位必须是0,然后是八进制数字序列(0-7)。如果字面值中的数字超过7,那么第一个0会被忽略,后面的数值将被当作十进制数值解析。

var num1 = 070; // 八进制56
var num2 = 079; // 无效的八进制,转化为十进制79
var num3 = 08;  // 无效的八进制,转化为十进制8

十六进制字面值的前两位必须是0x.

在进行算术计算时,所有以八进制和十六进制表示的数值最终都将被转换为十进制数值。

浮点数的最高精度是17位小数。3.125e7 = 3.125 * 10^7.

 

4, 由于ECMAScript中不存在块级作用域,因此在循环内部定义的变量也可以在外部访问到。

 

5,with语句

  with语句的作用是将代码的作用域设置到一个特定的对象中:with(expression) statement;

var qs = location.search.substring(1);
var hostname = location.hostname;
var url = location.href;

使用with后:

with(location) {
    var qs = search.substring(1);
    var hostname = hostname;
    var url = href;
}

上例中,使用with语句关联了location对象,这意味着在with语句的代码块内部,每个变量首先被认为是一个局部变量,而如果在局部环境中找不到该变量的定义,就会查询location对象中是否有同名的属性。如果发现了同名属性,则以location对象属性的值作为变量的值。

 

6, switch语句

可以在switch语句中使用任何数据类型,无论是字符串还是对象都没有问题。

 

7, 函数

  ECMAScript函数不介意传递进来多少个参数,也不在乎传进来的参数时什么数据类型。原因是ECMAScript中的参数在内部是用一个数组来表示的,函数接受到的是中都是这个数组,而不关心数组中包含哪些参数。

  ECMAScript中的所有参数传递的都是值,不可能通过引用传递参数。

  ECMAScript不能像传统意义上那样实现重载。如果在ECMAScript中定义了两个名字相同的函数,则该名字只属于后定义的函数。

  所有函数的参数都是按值传递的,也就是说把函数外部的值复制给函数内部的参数。

  instanceof可以检测引用是什么类型的对象。

 

8, 执行环境及作用域

  每个执行环境都有一个与之关联的变量对象,环境中定义的所有变量和函数都保存在这个对象中。

  全局执行环境是最外围的一个执行环境。在Web浏览器中,全局执行环境被认为是window对象,因此所有全局变量和函数都是作为window对象的属性和方法创建的。某个执行环境中的所有代码执行完毕之后,该环境被销毁,保存在其中的所有变量和函数定义也随之销毁。

  内部环境可以通过作用域链访问所有的外部环境,但外部环境不能访问内部环境中的任何变量和函数。每个环境都可以向上搜索,但不能向下搜索。

 

posted on 2017-07-03 09:44  coder为  阅读(297)  评论(0编辑  收藏  举报