003一起来玩JS

基本概念篇

一、语法

  1. ECMAScript严格区分大小写。
  2. 标识符

    所谓标识符,就是指变量、函数、属性的名字,或者函数的参数。


标识符可以是按照下列格式规则组合起来的一或多个字符:
  • 第一个字符必须是一个字母、下划线(_)或一个美元符号($)
  • 其他字符可以是字母、下划线、美元符号或数字。

不能把关键字、保留字、true、false 和null 用作标识符。

  1. 严格模式
    ES5引入了严格模式。。在严格模式下,对以往ES版本中的某些不安全的操作做出抛出错误的处理。要在整个脚本中启用严格模式,可以在顶部添加如下代码:
"use strict";

在函数内部的上方包含这条编译指示,也可以指定函数在严格模式下执行:

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

严格模式下,JavaScript 的执行结果会有很大不同,因此本书将会随时指出严格模式下的区别。支持严格模式的浏览器包括IE10+、Firefox 4+、Safari 5.1+、Opera 12+和Chrome。

二、 变量

ECMAScript 的变量是松散类型的,所谓松散类型就是可以用来保存任何类型的数据,每个变量仅仅是一个用于保存值的占位符。定义变量时要使用var 操作符(注意var 是一个关键字),后跟变量名(即一个标识符)。

var message;

这行代码定义了一个名为message 的变量,该变量可以用来保存任何值(像这样未经过初始化的变量,会保存一个特殊的值——undefined,相关内容将在3.4 节讨论)。ECMAScript 也支持直接初始化变量,因此在定义变量的同时就可以设置变量的值,如下所示:

var message = "hi";

在此,变量message 中保存了一个字符串值”hi”。像这样初始化变量并不会把它标记为字符串类型;初始化的过程就是给变量赋一个值那么简单。因此,可以在修改变量值的同时修改值的类型

var message = "hi";
message = 100; // 有效,但不推荐

在这个例子中,变量message 一开始保存了一个字符串值”hi”,然后该值又被一个数字值100 取代。虽然我们不建议修改变量所保存值的类型,但这种操作在ECMAScript 中完全有效。

用var 操作符定义的变量将成为定义该变量的作用域中的局部变量,如果在函数中使用var 定义一个变量,那么这个变量在函数退出后就会被销毁

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

这里,变量message 是在函数中使用var 定义的。当函数被调用时,就会创建该变量并为其赋值。而在此之后,这个变量又会立即被销毁,因此例子中的下一行代码就会导致错误。

不过,可以像下面这样省略var 操作符,从而创建一个全局变量:

function test(){
    message = "hi"; // 全局变量
}
test();
alert(message); // "hi"

这个例子省略了var 操作符,因而message 就成了全局变量。这样,只要调用过一次test()函数,这个变量就有了定义,就可以在函数外部的任何地方被访问到。

虽然省略 var 操作符可以定义全局变量,但这也不是我们推荐的做法。因为在局部作用域中定义的全局变量很难维护,而且如果有意地忽略了var 操作符,也会由于相应变量不会马上就有定义而导致不必要的混乱。给未经声明的变量赋值在严格模式下会导致抛出ReferenceError 错误。

可以使用一条语句定义多个变量,只要像下面这样把每个变量(初始化或不初始化均可)用逗号分隔开

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

这个例子定义并初始化了3 个变量。同样由于ECMAScript 是松散类型的,因而使用不同类型初始化变量的操作可以放在一条语句中来完成。虽然代码里的换行和变量缩进不是必需的,但这样做可以提高可读性。

数据类型

ECMAScript 中有5 种简单数据类型(也称为基本数据类型):UndefinedNullBooleanNumberString。还有1 种复杂数据类型——ObjectObject 本质上是由一组无序的名值对组成的。

  1. typeof操作符
    鉴于 ECMAScript 是松散类型的,因此需要有一种手段来检测给定变量的数据类型——typeof 就是负责提供这方面信息的操作符。
var message = "some string";
alert(typeof message); // "string"
alert(typeof(message)); // "string"
alert(typeof 95); // "number"

从技术角度讲,函数在ECMAScript 中是对象,不是一种数据类型。然而,函数也确实有一些特殊的属性,因此通过typeof 操作符来区分函数和其他对象是有必要的。

  1. Undefined类型
    Undefined 类型只有一个值,即特殊的undefined。在使用var 声明变量但未对其加以初始化时,这个变量的值就是undefined
var message;
alert(message == undefined); //true

猜你喜欢

转载自blog.csdn.net/zljiaa/article/details/81706403