js003-基本概念

js003-基本概念

3.1 语法

3.1.1 区分大小写 ECMAScript中的一切(变量、函数名和操作符)都是区分大小写的,并且不能用关键字作为函数名:如 typeof。

3.1.2 标识符 所谓标识符就是变量、函数、属性的名字、或者函数的参数,标识符符合以下规格:

第一个字母必须是一个字母、下划线或者一个美元符号

其他字符可以是字母、下划线、美元符号、数字

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

 

3.1.3 注释  //单行注释    

 /*

块级注释

*/

3.1.4 严格模式  要在整个脚本中启用严格模式 可以在顶部添加代码

"use strict";

如:function dosomething(){"use strict";   //函数体  }

3.1.5 语句  ECMAScript以一个分号结尾

 

3.2关键字和保留字

ECMA-262描述了具有特定用途的关键字,这些关键字可用于表示控制语句的开始或结束,或者用于执行特定操作等。关键字也是语言保留的,不能用于标识符

 

 

 

3.3 变量

ECMScript的变量是松散类型的。松散类型:就是可以用来班次你任何类型的数据。定义变量:        

 

 var  message;

该行代码定义了一个名为message的变量,该变量可以保存任何值,未初始化的保存一个特殊值---undefined

 

初始化一个变量

var message = "hi";

 

修改变量值的同时修改类型

var message = "hi";

message = 100;  //有效,但是不推荐

 

局部变量和全局变量

局部变量

全局变量

       function test(){

              var message = "hi"; //局部变量

       }

       test();

       alert(message); //错误

       function test(){

              message = "hi"; //全局变量

       }

       test();

       alert(message); //"hi"

变量message是在函数中使用var定义的,当函数被调用时,就会创建该变量并为其赋值,而此后就会立即被销毁,在下面的代码中就不能使用,所以会出现错误。

省略var 。  message就成了全局变量。这样只要调用过一次test()函数,这个变量就有了定义,可以在函数外部的任何地方被访问到。。但是不推荐这样做,因为难以维护,给未声明的变量赋值在严格模式下会导致抛出referenceerror的错误

 

可以使用一条语句定义多个变量,如下,用逗号(,)隔开

var message = "hi",

           found = "false",

           age = 20;

定义了3个变量,因为ECMAScript是松散型的,所以不同类型的变量可以用一条语句来完成

 

 

 

3.4 数据类型

3.4.1 typeof操作符

鉴于ECMAScript是松散型的,因此需要一种手段来检测给定变量的数据类型---typeof。对一个值使用typeof操作符可能返回夏磊某个字符串

undifine

该值未定义

boolean

是布尔值

string

是字符串

number

数值

object

这个值是对象或者null

function

这个值是函数

例子:

var message = "some thing";

  输出

alert(typeof(message));

   "string"

alert(typeof(message));

   "string"

alert(typeof 99);

   "number"

这几个例子说明typeof操作符的操作数可以是变量也可以是数字。Typeof是一个操作符不是一个函数,所以后面的括号()是可有可无的。

 

3.4.2 undefined类型

该类型只有一个值,即特殊的undefined。变量在用var声明后,要是没有对其进行初始化,它的默认值就为undefined。

例如

var message ;

alert(message == undefined) ;

返回true

 

 

包含undefined值和未定义的变量是不一样的

       var message ;     //下面这个变量生命后默认取得了undefined值

//var age = 20;      //该变量没有声明

   alert(message);    //undefind

  alert(age);       //产生错误

 

 

3.4.3 null类型

Null类型是第二个只有一个值的数据类型,这个特殊的值是null。从逻辑角度看,null值表示一个空对象指针,所以typeof操作符检测null值时会返回object

var car = null;

alert(typeof car);      //object

返回object

 

 

3.4.4            boolean类型

   

var found = true;

var lost = false;

 

数据类型

转换为true的值

转换为false的值

Boolean

true

false

string

任何非空字符串

“”(空字符串)

number

任何非0数字值(包括无穷大)

0和nan

object

任何对象

null

undefined

n/a

undefined

 

 

 

3.4.5            number类型

   JScript 支持整数和浮点数。整数可以为正数、0 或者负数;浮点数可以包含小数点、也可以包含一个 "e"(大小写均可,在科学记数法中表示“10的幂”)、或者同时包含这两项。这些数遵循数值表示的 IEEE 754 标准。最后,还有一些特殊的数值:

  • NaN,即不是一个数
  • 正无穷
  • 负无穷
  • 正数 0
  • 负数 0

整数可以以 10 (十进制)、8 (八进制)和 16 (十六进制)作为基数来表示。

八进制整数用一个前导 "0" 指明,并可以包含从 0 到 7 的数字。如果某个数字有一个前导 "0" 但是又包含数字 "8"和/或 "9",则该数字是一个十进制数。如果一个应该为八进制的数中包含了字母 "e" (或 "E") 将会产生一个错误。

十六进制("hex") 整数用前导 "0x" 指明(其中的 "X" 大小写均可),并且可以包含从 0 到 9 的数字以及从 A 到 F 的字符(字母的大小写均可)。字母 "e" 在十六进制记数法中是一个允许的数字,但并不是表示这是一个指数。字母 A 到 F 是作为单个的数字,用来表示以 10 为基数的 10 到 15 这些数。也就是说,0xF 等于 15,而 0x10 就等于 16。

八进制数和十六进制数可以是负数,但不能是小数。一个以单个 "0" 开头并包含一个小数点的数是一个十进制的浮点数;如果一个数以 "0x" 或 "00"开头并包含一个小数点,则该小数点右边的任何数都将被忽略。

一些示例:

.0001, 0.0001, 1e-4, 1.0e-4  // 四个浮点数,它们互等。

3.45e2                       // 一个浮点数,等于 345。

42                           // 一个整数。

0377                         // 一个八进制整数,等于255。

00.0001                      // 由于八进制数不能有小数部分,因此这个数等于 0。

0378                         // 一个整数,等于 378。

0Xff                         // 一个十六进制整数,等于 255。

0x37CF                       // 一个十六进制整数,等于 14287。

0x3e7                        // 一个十六进制整数,等于 999。

0x3.45e2                     // 由于十六进制数不能有小数部分,因此这个数等于 3。

 

 

 

3.4.6            String类型

   String类型包含一些特殊的字符字面量,页脚转义序列。用于表示非打印字符或者具有其他用途的字符。这些字符字面量如下表所示:

字面量

含义

\n

换行

\t

制表

\b

退格

\r

回车

\f

进纸

\\

斜杠

\' (单引号)

单引号

\"  (双引号)

双引号

\xnn

以16进制代码nn表示的一个字符(其中n为0~F)

\unnn

以16进制代码nnnn表示的一个Unicode字符(其中n为0~F)

 

字符串特点:字符串一单创建,他们的值就不能改变

转换为字符串:要把一个值转换为一个字符串有两种方式。

tostring()方法

(调用tostring()方法不必传递参数)

           var age = 11;

           var ageAsString = age.tostring();

传递参数的tostring()

           var num = 10;

           alert(num.tostring());    //"10"

           alert(num.tostring(2));   //"1010"

           alert(num.tostring(8));   //"12"

           alert(num.tostring(10));  //"10"

           alert(num.tostring(16));  //"a"

 

3.4.7            object类型

var o = new object();

每个实例都具有下列属性和方法。

constructor

保存着用于创建当前对象的函数

hasOwnproPerty(propertyName)

用于检查给定的属性在当前对象实例中(不是在实例原型中)是否存在

isPrototypeOf(object)

用于检查传入的对象是否传入对象原型

propertyIsEnumerable(propertyName)

检查给定的属性能否用for-in语句来枚举

toLocaleString()

返回对象的字符串表示,该字符串与执行环境的地区对应。

toString()

返回对象的字符串表示

valueOf()

返回对象的字符串、数值或布尔值表示,通常与tostring()返回的值一样

 

 

 

3.5                操作符

   包括算术操作符(如加减号)、位操作符、关系操作符和相等操作符。ECMAScript操作符雨中不同之处在于:它能够适用于很多值,例如字符串、数字值、布尔值、对象

 

3.5.1 一元操作符

   只能操作一个数值的操作符叫做一元操作符,这是ECMAScript中最简单的操作符

递增操作符

递减操作符

var age = 11;

++age;

var age = 11;

--age;

使用前置递增或者递减操作符,变量的值是在语句被求值以前改变的。

 

3.5.2 位操作符

按位非(NOT)

~

按位与(AND)

&

按位或(OR)

|

按位异或(XOR)

^

左移

<< 

有符号右移

>> 

无符号右移

>>> 

 

3.5.3布尔操作符

逻辑非

逻辑与

&&

逻辑或

||

 

3.5.4            乘性操作符

  

乘法

*

除法

/

求模

%

 

3.5.5            加性操作符

加法

+

减法

-

 

3.5.6            关系操作符 (大写字母的布尔值小于小写字母的布尔值)

大于

小于

大于等于

>=

小于等于

<=

 

3.5.7            相等操作符

相等和不相等

==

!=

全等和不全等

===

!==

 

3.5.8            条件操作符

Variable = boolean_expression ? true_value : false_value;

 

3.5.9            逗号操作符

 var num1 = 1, num2 = 2, num3 = 3;  逗号可以用于生命多个变量,逗号还可以用于赋值:var num = (2,6,5,3,8,4,9);  //num值为9,因为最后一个值为9

 

3.5.10        赋值操作符

乘/赋值

*=

除/赋值

/=

模/赋值

=

加/赋值

+=

减/赋值

-=

左移/赋值

<<=

有符号右移/赋值

>>=

无符号右移/赋值

>>>=

 

 

3.6                语句

3.6.1        if语句

if (a < b) {

                     alert("A is less than B");

              }else if (a > b) {

                     alert("A is greater than B");

              }else{

                     alert("A is equal to B");

              }

 

3.6.2        do-while语句

do{

              statement

       }while(expression)

 

3.6.3        while语句

while(i<0){

              i++;

       }

 

3.6.4        for语句

for (var i = thing.length - 1; i >= 0; i--) {

              alert[i]

       };

 

3.6.5        for-in语句

for(var propName in window){

              document.write(propName);

       }

 

3.6.6        label语句

start : for(var i = 0;i <= count; i++){

              alert(i);

       }

 

3.6.7        break和continue语句

       var num = 0;

       for (var i =  1; i <= 0; i++) {

              if(i%5 == 0){

                     break;

              }

              num++;

       }

       alert(num)      //4

var num = 0;

       for (var i =  1; i <= 0; i++) {

              if(i%5 == 0){

                     coutinue;

              }

              num++;

       }

       alert(num)      //8

 

 

3.6.8         with语句

with语句的作用干事将大妈的作用域设置到一个特定的对象中。语法如下:

with (expression) statement

定义with 语句额目的主要是为了简化多次编写同一个对象的工作,如下面的例子:

       var qs = location.search.substring(1);

       var hostName = location.hostName;

       var url = href;

以上几行代码都包含location对象,如果使用with语句,就可以吧上面代码编写成如下所示:

with(location){

       var qs = search.substring(1);

       var hostName = hostName;

       var url = href;

}

 

 

3.6.9        switch语句

语法

例子

       switch(expression){

              case value : statement

              break;

              case value : statement

              break;

              case value : statement

              break;

              case value : statement

              break;

              default : statement

       }

       switch(expression){

              case 20 : alert(20)

              break;

              case 18 : alert(18)

              break;

              case 16 : alert(16)

              break;

              case 14 : alert(14)

              break;

              default : alert("other")

       }

 

3.7            函数

函数的基本语法如下所示

function functionName(arg0, arg1, arg2,..., argN){

statement:

}

 

函数示例:

              function sayhi(name, message){

                    alert("hello" + name +"," message);

             }

严格模式对函数有一些限制:

不能把函数命名为eval或argument;

不能把参数命名为eval或argument;

不能出现两个命名参数同名的情况。

 

 

3.7.1        理解参数

3.7.2        没有重载

 

3.8 小结

 

 

 

版权声明:未经作者同意,不得私自转载。http://www.cnblogs.com/lal-fighting/

posted @ 2016-01-18 17:40  liaoali  阅读(399)  评论(0编辑  收藏  举报