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

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 中的一些不确定的行为将得到处理,而且对某些不安全 的操作也会抛出错误。
要在整个脚本中启用严格模式,可以在顶部添加如下代码:
"use strict";
这行代码看起来像是字符串,而且也没有赋值给任何变量,但其实它是一个编译指示( pragma ), 用于告诉支持的 JavaScript 引擎切换到严格模式。这是为不破坏 ECMAScript 3 语法而特意选定的语法。
在函数内部的上方包含这条编译指示,也可以指定函数在严格模式下执行:
function doSomething(){
"use strict";
//函数体
}
持严格模式的浏览器包括 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 声明后未赋值,默认取得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)

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

特点:
  1. 任何涉及NaN的操作(例如 NaN/10)都会返回NaN
  2. 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、字符字面量(转义序列)
这些字符字面量可以出现在字符串中的任意位置,而且也将被作为一个字符来解析,如下面的例子 所示:
var text = "This is the letter sigma: \u03a3.";
这个例子中的变量 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( ) : 返回对象的字符串、数值或布尔值表示。







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值