第三章 基本概念

3.1语法

3.1.1区分大小写

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

3.1.2标识符

   指变量、函数、属性的名字,或者函数的参数。

   格式规则:

       第一个字符必须是字母、下划线(_)、美元符号($);

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

   ECMAScript标识符采用驼峰大小写格式,第一个字母小写,剩下的每个有意义的单词的首字母大写。

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

3.1.3注释

   //单行注释

   /*

   *多行(块级)注释

   */

3.1.4严格模式

   在脚本顶部添加如下代码:"use strict"。

3.1.5语句

   ECMAScript中的语句以一个分号结尾;

   用花括号将多条语句组合到一个代码块中;

   始终在控制语句中使用代码块。

3.2关键字和保留字

   ECMA-262描述了一组具有特定用途的关键字,可用于表示控制语句的开始或结束,或者用于执行特定操作等:

   break do instanceof typeof case else new var catch finally return void continue for switch while debugger function this with default if throw delete in try

   保留字,可能在将来被用作关键字:

   abstract enum int short boolean export interface static byte extends long super char final native synchronized class float package throws const goto private transient debugger implements protected volatile double import public let yield

   关键字和保留字不能用作标识符。

3.3变量

 ECMAScrit的变量是松散类型的,可以用来保存任何类型的数据,每个变量仅仅是一个用于保存值得占位符而已。

 定义变量:var(关键字) 变量名(标识符);

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

 可以使用一条语句定义多个变量,用逗号分隔。

3.4数据类型

3.4.1typeof操作符

   检测给定变量的数据类型。

3.4.2Undefined类型

   使用var声明变量但未对其加以初始化时,这个变量的值就是undefined。

   对未初始化和未声明的变量执行typeof操作符都返回undefined值。

3.4.3Null类型

   空对象指针。只要意在保存对象的变量还没有真正保存对象,就应该明确地让该变量保存null值。

3.4.4Boolean类型

   只有两个字面量:true和false;

   调用转型函数Boolean(),将一个值转换为其对应的Boolean值。

3.4.5Number类型

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

   2.数值范围:5e-324~1.7976931348623157e+308;

     用isFinite()函数确定一个数值是否有穷。

   3.NaN:非数值,isNaN()函数确定参数是否“不是数值”。

   4.数值转换:

     Number()转型函数可用于任何数据类型;

     parseInt()和parseFloat()专门用于把字符串转换成数值。

3.4.6String类型

   由0个或多个16位Unicode字符组成的字符序列,即字符串。字符串可以由双引号("")或单引号('')表示。

   1.字符字面量

   2.字符串的特点

     ECMAScript中的字符串是不可变的;

   3.转换为字符串

     toString()方法;null和undefined没有这个方法

     转型函数String();能够将任意类型的值转换为字符串

     要把某个值转换为字符串,可以使用加号操作符把它和一个字符串("")加在一起。

3.4.7Object类型

   是一组数据和功能的集合;

   var o =  new Object ();

   Object 具有下列属性和方法:

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

              hasOwnProperty(propertyName以字符串形式指定):检测给定的属性在当前对象实例中是否存在;

     isPrototypeOf:检查传入的对象是否是另一对象的原型;

     propertyIsEnumerable(propertyName):检查给定的属性是否能够使用for-in 语句来枚举;

     toLocaleString():返回对象的字符串表示,与执行环境的地区对应;

     toString():返回对象的字符串表示;

     valueOf():返回对象的字符串、数值或布尔值表示;

3.5操作符:用于操作数据值

3.5.1一元操作符

   只能操作一个值的操作符叫做一元操作符。

   1.递增和递减操作符:

     前置型:变量的值都是在语句被求值以前改变的;

     后置型:递增递减操作是在包含它们的语句被求值之后才执行的;

     遵循下列规则:

     1、包含有效数字的字符串:先转化为数字值,再加减1;

     2、不包含有效数字字符的字符串:值为NaN;

     3、false:先转化为0再加减1;

     4、true:先转化为1再加减1;

     5、浮点数值,加减1;

     6、对象:先调用valueOf()取得一个可供操作的值再对该值应用前述规则;如果结果是NaN,则在调用toString()后应用前述规则。对象变量变成数值变量。

   2.一元加和减操作符

     应用于非数值时会对这个值执行转换。

3.5.2位操作符

   按内存中表示数值的位来操作数值。先将64位的值转化为32 位的整数,然后执行操作,最后再将结果转化回64位。

   对有符号的整数,前31位表示整数的值,第32位表示数值符号(符号位):0表示正数,1表示负数。正数以纯二进制格式存储;负数采用二进制补码(先求数值绝对值的二进制,再求二进制反码,反码加1);

   1、(~)按位非,返回数值的反码,本质是操作数的负值减1;

   2、(&)按位与,将两个数值的每一位对齐,全1为1,有0为0;

   3、按位或(|),有1为1,全0为0;

   4、按位异或(^),相同为0,不同为1;

   5、左移(<<),不影响符号位;

   6、有符号的右移(>>),保留符号位,以符号位的值来填充;

   7、无符号右移(>>>),以0填充;

3.5.3布尔操作符

   1、逻辑非(!),可应用于ECMAScript中的任何值,首先将操作数转换为一个布尔值,然后求反。

   2、逻辑与(&&),全true为true,有false为false,短路操作符,第一个为false则不会求第二个数的值;

   在有一个操作数不是布尔值的情况下:

       1、第一个操作数是对象,返回第二个操作数;

       2、第二个数为对象,只有当第一个数为true才返回该对象;

       3、两个数都是对象,返回第二个;

       4、有null,则返回null;

       5、有NaN,则返回NaN;

       6、有undefined,则返回undefined;

   3.逻辑或(||),有ture为true,全false为false,第一个数为true,则不会求第二个数的值;

       有一个操作数不是布尔值:

       1、第一个操作数是对象,返回第一个操作数;

       2、第一个数为false,返回第二个数;

       3、两个数都是对象,返回第一个;

       4、有null,则返回null;

       5、有NaN,则返回NaN;

       6、有undefined,则返回undefined;

3.5.4乘性操作符

   在操作数为非数值的情况下会执行自动的类型转换。

   1、乘法(*)

       特殊规则:

       1、操作数都是数值,执行常规的乘法计算;

       2、有NaN,则为NaN;

       3、Infinity乘0,为NaN;

       4、Infinity乘非0,为Infinity或-Infinity,取决于符号操作数的符号;

       5、Infinity乘Infinity,为Infinity;

       6、如果有一个操作数不是数值,则在后台调用Number()将其转换为数值,再应用上面的规则。

   2.除法(/)

       特殊规则:

       1、操作数都是数值,执行常规的除法计算;

       2、有NaN,则为NaN;

       3、Infinity被Infinity除,为NaN;

       4、非零有限数被零除,为Infinity或-Infinity,取决于符号操作数的符号;

       5、0除0,为NaN;

       6、Infinity被任何非零数除,为Infinity或-Infinity,取决于符号操作数的符号;

       7、如果有一个操作数不是数值,则在后台调用Number()将其转换为数值,再应用上面的规则。

   3.求模(%)

       特殊规则:

       1、操作数都是数值,执行常规的除法计算;

       2、Infinity被Infinity除,为NaN;

       3、Infinity被有限大的数值除,为NaN;

       4、非零有限大数被零除,为NaN;

       5、被除为0,为0;

       6、有限大的数值被Infinity除,结果是被余数;

       7、如果有一个操作数不是数值,则在后台调用Number()将其转换为数值,再应用上面的规则。

3.5.5加性操作符

   1、加法

       1、数值加数值,常规计算;

       2、有NaN,为NaN;

       3、Infinity加Infinity,为Infinity;

       4、-Infinity加-Infinity,为-Infinity;

       5、Infinity加-Infinity,为NaN;

       6、+0加+0,为+0;

       7、-0加-0,为-0;

       8、+0加-0,为+0;

       9、字符串加字符串,拼接;

       10、字符串加非字符串,先将非字符串转换成为字符串再拼接;

   2、减法

       1、数值加数值,常规计算;

       2、有NaN,为NaN;

       3、Infinity减Infinity,为NaN;

       4、-Infinity减-Infinity,为NaN;

       5、Infinity减-Infinity,为Infinity;

       6、+0减+0,为+0;

       7、-0减-0,为+0;

       8、+0减-0,为-0;

       9、-Infinity减Infinity,为-Infinity;

       10、如果有一个操作数是字符串、布尔值、null、undefined,先调用Number()函数将其转换为数值,再按前面规则计算;

       11、如果有一个操作数是对象,先调用valueOf()函数取得表示该对象的数值,如果没有valueOf(),则调用toString()并将结果转化为数值,再按前面规则计算;

3.5.6关系操作符

   < 、>、<=、>=

   1、如果两个操作数都是数值,则执行数值比较;

   2、两个字符串,则比较字符编码值,大写字母编码小于小写字母编码;

   3、如果一个操作数时数值,则转化另一个数为数值再比较;

   4、如果有一个操作数是对象,先调用valueOf()函数取得表示该对象的数值,如果没有valueOf(),则调用toString()并将结果转化为数值,再按前面规则计算;

   5、如果一个数是布尔值,则先转换为数值在比较;

   6、任何操作数与NaN比较结果都是false;

3.5.7相等操作符

   1、相等(==)和不相等(!=)

   先转换操作数(强制转型),然后比较它们的相等性;

   转换规则:

       1、布尔值转换为数值;

       2、字符串和数值比较,字符串转换为数值;

       3、有一个对象,先调用valueOf()再比较;

       4、null和undefined相等;

       5、NaN等于NaN;

       6、两个对象比较是不是同一个对象;

   2、全等(===)和不全等(!==)

   比较之前不转换操作数;

   全等表示两个操作数未经转换就相等的情况;

   不全等表示两个操作数未经转换就不相等的情况;

3.5.8条件操作符

   variable = boolean_expression ? true_value : false_value;

3.5.9赋值操作符(=)

   把右边的值赋给左侧的变量;

   复合赋值操作符:*=、/=、%=、+=、—=、<<=、>>=、>>>=。

3.5.10逗号操作符

   可以在一个语句中执行多个操作,多用于声明多个变量,还可以用于赋值,返回表达式中最后一项;

3.6语句

ECMA-262规定了一组语句,也称为流控制语句。语句定义了ECMAScript的主要语法,通常使用一个或多个关键字来完成给定任务。

3.6.1if语句

始终使用代码快(以一对花括号括起来的多行代码)

   if (contidion1){
     statement1
   }else if (condition2){
     statement2
   }else {
    statement3
   }

3.6.2do-while语句

   对条件表达式求值前,循环体内的代码至少会被执行一次。

do {
statement
} while (expression)

3.6.3while语句

   在循环体内代码被执行之前,就会对出口条件求值。

while (expression) {
statement
}

3.6.4for语句

   前置测试循环语句。

   for (initialization; expression; post-loop-expression可选) {
    statement
   }

3.6.5for-in语句

   是精准的迭代语句,可以用来枚举对象的属性。

for (property in expression) {
statement
}

3.6.6label语句

   在代码中添加标签以便将来使用,一般与for语句等循环语句配合使用。

label : statement

3.6.7break和continue语句

   用于在循环中精确的控制代码的执行;break 语句会立即退出循环,强制继续执行循环后面的语句;continue语句立即退出循环,然后从循环的顶部继续执行。

3.6.8with语句

   作用是将代码的作用域设置到一个特定的对象中。

with (expression) {
statement
}

3.6.9switch语句

switch (expression) {
case value :statement
break ;

default:statement
}

3.7函数

function functionName (arg1,arg 2,…Arg n) {
statements
}

3.7.1理解参数

   命名的参数只提供便利,但不是必须的。

   无需制定函数的返回值,因为任何ECMAScript函数都可以在任何时候返回任何值;未指定返回值的函数返回的是一个特殊的undefined 值。

  ECMAScript 中没有函数签名的概念,因为其函数参数是以一个包含零或多个值的数组形式传递。

   可以向ECMAScript函数传递任意数量的参数,并通过argument对象来访问这些参数。

3.7.2没有重载

   由于不存在函数签名特性,函数不能重载。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,881评论 4 368
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,052评论 1 301
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 110,598评论 0 250
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,407评论 0 217
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,823评论 3 294
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,872评论 1 224
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,037评论 2 317
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,778评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,505评论 1 247
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,745评论 2 253
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,233评论 1 264
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,568评论 3 260
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,231评论 3 241
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,141评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,939评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,954评论 2 283
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,784评论 2 275

推荐阅读更多精彩内容