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

《JavaScript高级程序设计》笔记——chapter3 基本概念

2016-12-08 16:48 323 查看
ECMA-262通过叫做ECMAScript的“伪语言”为我们描述了所有的基本概念:
语法
关键字和保留字
变量
数据类型
操作符
语句
函数

3.1 语法
ECMAScript 的语法大量借鉴了C及其他类C语言(如Java 和 Perl)的语法

3.1.1  区分大小写    ECMAScript中的一切(变量、函数名和操作符)都区分大小写。

3.1.2  标识符

标识符,就是指变量、函数、属性的名字,或者函数的参数。
标识符可以是按照下列各式规则组合起来的一个或多个字符:
第一个字符不能是数字,必须是一个字母、下划线(_)或者一个美元符号($);
其他字符可以是字母、下划线、美元符号或数字。
按照惯例,ECMAScript标识符采用驼峰大小写格式,也就是第一个字母小写,剩下的每个单词的首字母大写。
注:不能把关键字、保留字、true、false 和 null 用作标识符。

特殊:(其实也是惯例)为了区别ECMAScript中的其他函数,构造函数始终都应该以一个大写字母开头,而非构造函数则应该以一个小写字母开头。(摘自《JavaScript高级程序设计》P145)     例如:

function Person(name, age, job) {
    this.name = name;
    this.age = age;
    this.job = job;
    this.sayName = function() {
      alert(this.name)
    };
}

 3.1.3 注释

单行注释以两个斜杠开头:
//   单行注释
多行注释以  /*  开头,以  */  结尾:
/*    
*     这是一个多行(块级)注释    

*
*/

3.1.4 严格模式

ECMAScript 5
引入了严格模式(strict mode)的概念。
严格模式是为JavaScript
定义了一种不同的解析与执行模型。在严格模式下,ECMAScript 3
中的一些不确定的行为将得到处理,而且对某些不安全的操作也会抛出错误。
要在整个脚本中启用严格模式,可以在顶部添加如下代码:

[align=left]"use strict";[/align]
这行代码看起来像是字符串,而且也没有赋值给任何变量,但其实它是一个编译指示(pragma),用于告诉支持的JavaScript
引擎切换到严格模式。这是为不破坏ECMAScript 3
语法而特意选定的语法。
[align=left]在函数内部的上方包含这条编译指示,也可以指定函数在严格模式下执行:[/align]
[align=left]function doSomething(){[/align]
[align=left]"use strict";[/align]
[align=left]//函数体[/align]
[align=left]}[/align]
支持严格模式的浏览器包括IE10+、Firefox 4+、Safari
5.1+、Opera 12+和Chrome。

3.1.5  语句

语句是以一个分号( ; )结尾;任何时候不要省略它。
代码块可以使用花括号({  }) 来把多条语句组合到一个代码块中。
 

3.2  关键字和保留字

关键字: 可以用来表示控制语句的开始和结束,或者用于执行特定操作。不能用于标识符。

注: 带*上标的是第5版新增的关键字

保留字: 还没有任何特定的用途(囧),但它们可能在将来被用作关键字。

注: let 和 yield 是第5版新增的保留字。

最好不要使用关键字和保留字作为标识符和属性名!

3.3 变量(第四章整章详述)

ECMAScript 的变量是松散类型的,即可以用来保存任何类型的数据。
定义变量是要使用 var 操作符,后跟变量名(即一个标识符)。
例:  var  message;
另外,可以同时定义多个变量,主要把每个变量用逗号分隔开即可:

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

注意:用 var 操作符定义的变量将成为定义该变量的作用域中的局部变量。也就是说,在函数中使用 var 定义了一个变量,那么这个变量在函数退出后就会被销毁。
例如:

function test () {
var message = "hi"; //局部变量
}
test();
alert(message);  //错误

这个例子中如果省略 var ,message将会变成全局变量,就可以在函数外部的任何地方被访问到。
但是由于在局部作用域中定义全局变量很难维护,而且如果有意忽略 var 操作符,也会由于相应变量不会马上有定义而导致不必要的混乱。所以,不推荐这么使用。

 

3.4  数据类型
 
5种基本数据类型 :Undefined、  
Null、  
Boolean、   Number  和  String
1种复杂数据类型 :Object——本质上是由一组无序的名值对组成的。(第五章详述)

3.4.1  typeof 操作符

作用:用来检测给定变量的数据类型。
对一个值使用 typeof 操作符可能返回下列某个字符串:
"undefined"——如果这个值未定义
"boolean"——如果这个值是布尔值
"string"——如果这个值是字符串
"number"——如果这个值是数值
"object"——如果这个值是   对象  或 null(因为特殊值 null 被认为是一个空的对象引用)
"function"——如果这个值是  函数

3.4.2 Undefined 类型

Undefined 类型只有一个值,即特殊的 undefined。

在使用 var 声明变量,但并未对其加以初始化时,这个变量的值就是 undefined。
不过,包含undefined值的变量和尚未定义的变量还是不一样的。例:

var a;      // a 声明后未赋值
bdd6
,默认取得undefined值
// var b;   // b 没有声明

alert(a);   //"undefined"
alert(b);   //产生错误

alert(typeof a);  // "undefined" 
alert(typeof b);  // "undefined"   

虽然 a 和 b 一个声明,一个未声明,本质上有区别,但实际上无论对哪个变量也不可能执行真正的操作。 typeof操作符都返回undefined。

3.4.3  Null 类型

只有一个值,即特殊的  null 。
从逻辑上讲,null 值表示一个空对象的指针。所以用 typeof 检测 null 值会返回 "object"。如下:

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

实际上, undefined 派生自 null 值。  alert(null == undefined);  //true  

3.4.4  Boolean 类型

该类型只有两个字面值: true  和  false  
虽然Boolean类型的字面值只有两个,但 ECMAScript 中所有类型的值都有与这两个 Boolean 值等价的值。

这些转换规则对理解流控制语句自动执行相应的Boolean转换非常重要。

3.4.5  Number 类型

1、浮点数值
——该数值中必须包含一个小数点,并且小数点后面必须至少有一位数字。

var floatNum1 = 1.2;
var floatNum1 = 0.2;
var floatNum1 =  .2;  //有效,但不推荐

对于极大或极小的数值,可以使用科学计数法表示

var floatNum = 3.21e6;  //等于3210000;  

浮点数的最高精度是17位小数,但在进行算术计算时精确到远远不如整数。会产生舍入误差。


2、数值范围

ECMAScript能表示的最小数值保存在 Number.MIN_VALUE 中,在大多数浏览器中,这个值是 5e-324
ECMAScript能表示的最大数值保存在 Number.MAX_VALUE 中,在大多数浏览器中,这个值是 1.7976931348623157e+308
超出这两个数值范围,会转换为:
正无穷(Infinity)  负无穷(-Infinity)

用函数 isFinite(  )来确定一个数值是不是有穷的(即是不是位于最大值与最小值之间)

3.NaN 
——即非数值(Not a Number)

用于表示一个本来要返回数值的操作数未返回数值的情况。

特点:
任何涉及NaN的操作(例如 NaN/10)都会返回NaN
NaN 与任何值都不相等,包括NaN本身。

用 isNaN(  )来确定一个参数是否“不是数值”。

alert(isNaN(NaN));       //true
alert(isNaN(10));        //false 
alert(isNaN("10"));      //false (可以被转换成数值10)
alert(isNaN("blue"));    //true  (不能被转换成数值)
alert(isNaN(true));      //false (可以被转换成数值1)

4、数值转换

有3个函数可以把非数值转换为数值:
Number( )    用于任何数据类型
parseInt( )    字符串>>>数值
parseFloat( ) 字符串>>>数值

转换规则如下:

3.4.6  String 类型

1、字符字面量(转义序列)

[align=left]这些字符字面量可以出现在字符串中的任意位置,而且也将被作为一个字符来解析,如下面的例子所示:[/align]
[align=left]var text = "This is the letter sigma: \u03a3.";[/align]
这个例子中的变量text
有28
个字符,其中6 个字符长的转义序列表示1
个字符。

2、转换为字符串

toString(  ) 
    数值、布尔值、对象甚至字符串都有toString(  ) 方法。但 null  和  undefined  没有该方法。
String(  )

如果值有 toString(  ) 方法,则优先调用该方法并返回相应结果。
如果值是 null ,则返回 "null"
如果值是 undefined,则返回 "undefined"

var value1 = 10;
var value2 = true;
var value3 = null;
var value4 ;

alert(String(value1));    // "10"
alert(String(value2));    // "true"
alert(String(value3));    // "null"
alert(String(value4));    // "undefined"

3.4.7  Object 类型

——对象就是一组数据和功能的集合。

可以通过执行 new 操作符后跟要创建的对象类型的名称来创建。
在ECMAScript中,Object类型是所有它的实例的基础。

Objec每个实例都具有下列属性和方法:
constructor : 保存着用于创建当前对象的函数。
hasOwnProperty(propertyName) : 用于检查给定的属在当前对象实例中(而不是在实例的原型中)是否存在。
isPrototypeOf(object) : 用于检查传入的对象是否是当前对象的原型。
propertyIsEnumerable(properName) : 用于检查给定的属性是否能够使用 for-in 语句来枚举
toLocaleString( ) : 返回对象的字符创表示,该字符串与执行环境的地区相关
toString( ) : 返回对象的字符串表示
valueOf( ) : 返回对象的字符串、数值或布尔值表示。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: