zoukankan      html  css  js  c++  java
  • 第3章基本概念

    3.1语法

             C及其他类C语音(Java和Perl)的语法。

    3.1.1区分大小写

             变量名text和Text为两个不同变量。

    3.1.2标识符

             ECMAScript标识符采用驼峰大小写格式:即第一个字母小写,剩下每个单词的首字母大写,如:firstSecond。

    3.1.3注释

             单行注释 //

             块级注释 /*……*/

    3.1.4严格模式

    1)       严格模式是为JavaScript定义了一种不同的解析与执行模式。

    2)       启用方式:1.整个脚本启用:在顶部添加“use strict”

      2.函数启用:在函数内部的上方如:

             function doSomething(){

    “use strict”;

    }

    3.1.5语句

    1)       ECMAScript中的语句以分号结尾,不要省掉。

    2)       可以使用C风格的语法把多条语句组合到一个代码块中,即以{开头,以}结尾,如:

    if(test){

             test=false;

    }alert(test);

    始终在控制语句中使用代码,即使只有一个语句。

    3.2关键字和保留字

             最好不作为标识符和属性名。

    3.3变量

    1)       定义变量时要用var操作符,后跟变量名,如var message,该变量可用来保存任何值。未经初始化的变量会保存一个特殊的值—undefined。

    2)       可初始化 如var message=”hi”;

    3)       var操作符定义的变量将成为定义,该变量的作用域中的局部变量。若在函数中用var定义一个变量,函数退出后,该变量被销毁。

    4)       可省略var,创建一个局部变量。(不推荐)。

    5)       可使用一条语句定义多个变量,把每个变量用逗号隔开,如:var message=”hi”;found=fales;age=29;

    6)       严格模式下,变量名不能为eval和argument。

    3.4数据类型

             5种简单数据类型:Undefined,Null,Boolean,Number,String。一种复杂数据类型:Object。

    3.4.1typeof操作符

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

    1)       可能返回的字符串

    Undefined——如果这个值未定义

    Number——如果这个值是数值

    String——如果这个值是字符串

    Object——如果这个值是对象或Null

    Function——如果这个值是函数

    alert(typeof message);

    alert(typeof (message));

    2)       typeof操作符的操作数可为变量、数值。()不是必须的。

    3.4.2 Undefined类型

    1)       只有一个值,即特殊的Undefined。使用var声明变量未初始化时,这时的值为Undefined。

    2)       未初始化和未声明的变量执行typeof操作符会返回Undefined。

    3.4.3Null类型

    1)       只有一个值。即Null。

    2)       typeof操作符检测时会返回“Object”。

    3)       若定义的变量准备在将来用于保存对象,最好将该变量初始化为Null。

    3.4.4Boolean类型

    1)       有两个字面值:true、false。true不等于1,false不等于0。

    2)       true、false区分大小写。

    3)       ECMAScript中所有类型的值都有与这两个Boolean值相等的值。

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

    3.4.5Number类型

    1)       十进制数直接输入。var intNum=55;

    2)       八进制数的第一位必须为0(零),然后是0~7,若字面值中的数值超出了范围,前0被忽略,后面的值作十进制数值解析。

    3)       类型转换,Number(),parseInt() 和 parseFloat()。第一个函数可以应用于任何数据类型,另两个函数专门用于把字符串转换成数值

    3.4.6String类型

    1)       值:由单引号或双引号括起来的字符序列

    2)       出现场景:定义

    3)       类型转换,有两种方法,String() 和 toString()

    3.4.7Object类型

    1)       值:一组属性的集合

    2)       Boolean-true

    Number-NaN

    String-"[object Object]"

    3.5操作符

    javascript的操作符有一元操作符、位操作符、布尔操作符、乘性操作符、加性操作符、关系操作符、相等操作符、条件操作符、赋值操作符。其中值得注意的是,一元操作符和相等操作符都有可能改变操作数的数值类型。J

    3.5.1一元操作符:

    递增操作符 ++

    递减操作符 --

    正数 +

    负数 –

    递增和递减操作符遵循的规则.

    1.在应用于包含有效数字的字符串时,先将其转换为数字值,再执行加减1的操作。字符串变量变成数值变量。

    2.在应用于一个不包含有效数字字符的字符串时,将变量的值设置为NaN。字符串变量变成数值变量。

    3.在应用于布尔值false/true时,先将其转换为0再执行加减1的操作。布尔值变量变为数值变量。

    4.在应用于浮点数值时,执行加减1的操作。

    5.在应用于对象时,先调用对象的valueOf()方法以取得一个可供操作的值,然后对该值应用前面的四条规则。如果结果是NaN,则在调用toSring()方法后再应用前面的规则。对象变量变成数值变量。

    3.5.2位操作符

    位操作符用于最基本的层次上,我们一般比较少用到。ECMAscript中所有数值都以IEEE-754 64位格式存储,但是位操作符并不直接操作64位的值,而是先将64位转换成32位的整数,然后执行操作,最后将结果转换回64位。这会带来一个严重的副效应,即在对特殊的NaN和Infinity值应用位操作时,两个值都会被当做0来处理。

    按位非 ~

    按位与 &

    按位或 |

    按位异或 ^

    左移 <<

    有符号右移 >>

    无符号右移 >>>

    3.5.3布尔操作

    布尔操作用来测试两个值的关系

    逻辑非 !

    逻辑与 &&

    逻辑或 ||

    3.5.3.1逻辑非(!)

    只操作1个操作数,无论操作数是什么数据类型,都返回一个布尔值。逻辑非操作不会改变操作数的数据类型。

    逻辑非(!)操作符的规则:

    1.如果操作数是一个对象,则返回false。

    2.日字旁操作数是一个空字符串,则返回true。

    3.如果操作数是一个非空字符串,则返回false。

    4.如果操作数值是0,则返回true。

    5.如果操作数是任意非0数值(包括Infinity),返回false。

    6.如果操作数是null,返回true。

    7.如果操作数是NaN,返回true。

    8.如果操作数是undefined,返回true。

    3.5.3.2逻辑与(&&)

    逻辑与有两个操作数,它可以应用于任何类型的操作数,而不仅仅是布尔值。在有一个操作数不是布尔值的情况下,逻辑与操作就不一定返回布尔值。

    逻辑与(&&)操作符的规则

    1.如果第一个操作数是对象,则返回第二个操作数。

    2.如果第二个操作数是对象,则只有在第一个操作数的求值结果为true时才返回这个对象。

    3.如果两个操作数都是对象,则返回第二个操作数。

    4.如果有一个操作数时null,则返回null。

    5.如果有一个操作数时undefined,则返回undefined。

    逻辑与是一种短路操作,如果第一个操作数能够决定结果(如null,undefined),那么就不会对第二个操作数求值。

    3.5.3.3逻辑或(||)

    逻辑或的操作数有两个,如果其中有一个操作数不是布尔值,逻辑或也不一定返回布尔值,它遵循的规则如下:

    1.如果第一个操作数是对象,则返回第一个操作数;

    2.如果第一个操作数求值结果为false,则返回第二个操作数;

    3.如果两个操作数都为对象,则返回第一个操作数;

    4.如果两个操作数都是null,则返回null;

    5.如果两个操作数都是NaN,则返回NaN;

    6.如果连个操作数都是undefined,则返回undefined。

    可见逻辑或也是一种短路语句,如果第一个操作数的求值结果为true则不会对第二个操作数进行求值。

    注意:由以上规则可知,逻辑操作符均不会改变操作数的数据类型。

    利用逻辑与来避免为变量赋null或者undefined的值。

    3.5.4乘性操作符

    乘性操作符和其他语言中的乘性操作符用法类似,只不过在操作数为非数值的情况下会执行自动的类型转换。即参与乘性计算的某个操作数不是数值,会先使用Number()转型函数将其转换为数值。但是乘性操作不会改变操作数数值类型。

    乘法(*)

    除法(/)

    求模(%)

    3.5.5加性操作符

    加性操作符在操作数都为数值的时候执行常规的加减法操作,在为非数值时会有特殊的转化规则。但是同乘性操作符一样加性操作符不会改变数值类型。

    加法(+)

    减法(-)

    3.5.5.1加性操作符

    加性操作符在有操作数为字符串时遵循以下规则:

    1.如果两个操作数都为字符,则将第二个操作数与第一个操作数拼接起来;

    2.如果只有一个操作数是字符串,则将另一个操作数转换为字符串,然后将两个字符串拼接起来;

    3.5.5.2减性操作符

    1.如果有一个操作数是字符串,布尔值、null或者undefined,则先调用Number()方法,然后再根据数值减法规则执行减法计算。

    2.如果有一个操作数是对象,则调用对象的valueOf()方法取得该对象的数值。如果对象没有valueOf()方法方法,则调用tostring()方法并将得到的字符串转换为数值。

    3.5.6关系操作符

    小于(<)

    大于(>)

    小于等于(<=)

    大于等于(>=)

    3.5.7相等操作符

    相等(==)

    不相等(!=)

    全等(===)

    不全等(!==)

    1)       相等和不相等

    这组操作符是先转换再比较,即操作符会改变操作数的数值类型。

    1.如果有一个操作数是布尔值,则在比较之前会转换为数值;

    2.一个操作数是字符,另一个是数值,那么在比较相等性之前会将字符串转换为数值再进行比较;

    3.如果一个操作符是对象,另一个不是,则调用valueOf()方法,将得到的结果进行比较。

    4.如果两个都是对象,则比较是否是同一个对象,如果两个操作数都指向同一个对象,那么认为它们相等。

    2)       全等和不全等

    全等和不全等操作符不会改变操作数的数值类型。

    3.5.8条件操作符

    条件操作符会根据boolean_expression的求值结果来决定给变量value赋哪个值,求值为真是赋true_value值,为假时赋false_value值。

    3.5.9赋值操作符

    赋值(=)

    乘/赋值(*=)

    初/赋值(/=)

    模/赋值(%=)

    加/赋值(+=)

    减/赋值(-=)

    左移/赋值(<<=)

    无符号右移/赋值(>>>=)

    有符号右移/赋值(>>=)

    3.5.10逗号操作符

    逗号操作符用于在一条语句中执行多个操作。赋值时返回表达式的最后一项。

    3.6语句

    3.6.1.if语句

    if (condition) statement1 else statement2

    其中的condition条件可以是任意表达式,而且对这个表达式的求值结果不一定是布尔值。ECMAScript会自动调用Boolean()转换函数将这个表达式的结果转换为一个布尔值。如果对condition求值的结果为true,则执行statement1,如果对condition求值结果为false,则执行statement2。这两个语句既可以是一行代码,也可以是一个代码块(推荐)。

    3.6.2.switch语句

    switch(expression) {

        case value: statement

           break;

        case value: statement

           break;

        case value: statement

           break;

        default: statement

    }

    switch语句中每一个case的含义是:"如果表达式等于这个值value,则执行后面的语句statement"。而break会导致代码执行跳出switch语句。如果省略break关键字,就会导致执行完当前case后,继续执行下一个case。最后的default关键字则用于在表达式不匹配前面任何一种情形时,执行机动代码(因此,也相当于一个else语句)。

    3.6.3.do-while语句

    do {

        statement

    } while (expression);

    3.6.4while语句

    while(expression) statement

    3.6.5.for语句

    它具有在执行循环之前初始化变量和定义循环后要执行代码的能力。

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

        alert(i);

    }

    3.6.6for-in语句

    for-in 语句是一种精准的迭代语句,可以用来枚举对象的属性

    for (var prop in window) {

            console.log(prop);

        }

    ECMAScript对象的属性没有顺序。因此通过for-in循环输出的属性名是不可预测的,具体来讲,所有属性都会被返回一次,单反毁的先后次序可能会因浏览器而异。建议在使用之前,先检测确认该对象的值不是null或unedfined。

    3.6.7

    break语句

    立即退出循环

    continue语句

    退出当前正在执行的循环代码,然后开始继续循环。

    return语句

    可指定返回值,也可不指定(此时返回undefined)。

    1.return语句后停止并立即退出函数,return后面的语句也永远不会执行

    2.return语句只能在函数体内出现,如果不是的话会自动报语法错误

    3.7函数

    在JavaScript里有两种定义函数的方法

    函数声明        function 函数名称 (参数:可选){ 函数体 }

    函数表达式        function 函数名称(可选)(参数:可选){ 函数体 }

    在JavaScript中,每个函数其实都是一个Function对象。

    函数总是会返回一个值,但是一个过程有可能返回一个值,也有可能不返回。(函数不是过程)

    如果一个函数中没有使用return语句,则它默认返回undefined。要想返回一个特定的值,则函数必须使用 return 语句来指定一个所要返回的值。(使用new关键字调用一个构造函数除外)。

    调用函数时,传递给函数的值被称为函数的实参(值传递),对应位置的函数参数名叫作形参。

    如果实参是一个包含原始值(数字,字符串,布尔值)的变量,则就算函数在内部改变了对应形参的值,返回后,该实参变量的值也不会改变。

    如果实参是一个对象引用,则对应形参会和该实参指向同一个对象。假如函数在内部改变了对应形参的值,返回后,实参指向的对象的值也会改变。

    在函数执行时,this 关键字并不会指向正在运行的函数本身,而是指向调用该函数的对象。

    所以,如果你想在函数内部获取函数自身的引用,只能使用函数名或者使用arguments.callee属性

    (严格模式下不可用),如果该函数是一个匿名函数,则你只能使用后者。

  • 相关阅读:
    Longest Palindromic Substring
    PayPal MLSE job description
    Continuous Median
    Remove Duplicates From Linked List
    Valid IP Address
    Longest substring without duplication
    Largest range
    Subarray sort
    Multi String Search
    Suffix Trie Construction
  • 原文地址:https://www.cnblogs.com/wjw1997/p/6423021.html
Copyright © 2011-2022 走看看