《JavaScript高级程序设计》——第三章 基本概念

这章讲了JavaScript的语法、数据类型、流控制语句和函数。理解还是挺好理解的,但有很多和C、C++、Java不同的地方需要记忆。比如,

  • JavaScript标识符可以由Unicode字符字符组成。
  • JavaScript每条语句后面的分号也不是必需的,语句后面没有分号时,解析器会自己确定语句的结尾。
  • “+”,“-”,“*”、“/”、“&&”、“||”、“!”对不同类型操作对象进行计算的规则是不同的。
  • switch()括号内不像其他语言必须是字符或数字,而可以放任何类型数据。
  • 函数和其他语言也不一样,函数内有个arguments对象用来访问参数数组,函数不介意传递来多少个参数,也不在乎传进来的参数是什么的类型;函数没有重载,如果存在相同的函数名,只会保存最后一个函数。
  • 有个label标签语句在以后由break,continue引用

 

 

下面是这章做的笔记

 

typeof用来返回数据类型

         
        var message = "some string";
        alert(typeof message);    //"string"
        alert(typeof 95);         //"number"

 

 

 

只声明不定义的变量的值为undefined

        var message;
        alert(message == undefined);    //true

也可以用undefined显式初始化变量

         
        var message = undefined;
        alert(message == undefined);    //true

没声明的变量除了typeof和delete操作,进行其他运算都会报错

       
        var message;     //this variable is declared but has a value of undefined
        
        //make sure this variable isn't declared
        //var age
        
        alert(message);  //"undefined"
        alert(age);      //causes an error

没声明的变量进行typeof操作返回值也是undefined

     
        var message;     //this variable is declared but has a value of undefined
        
        //make sure this variable isn't declared
        //var age
        
        alert(typeof message);  //"undefined"
        alert(typeof age);      //"undefined"

 

 

 

null的typeof操作返回"object"

        var car = null;
        alert(typeof car);   //"object"

undefined派生自null,因此他们进行相等测试时,返回true

 alert(null == undefined);   //true  

 

 

 

Boolean()可以将所有类型数据转换成布尔值

        var message = "Hello world!";
        var messageAsBoolean = Boolean(message);
        
        alert(messageAsBoolean); //true

流控制语句会自动将传进来的值转换成Boolean

        var message = "Hello world!";
        if (message){  
            alert("Value is true");
        }

 

 

 

NaN与任何值都不相等包括他自己

isNaN()先尝试将接收到的值转换成数值,然后判断转换后的值是否是数字,如果是数字则返回false,否则返回true

        alert(NaN == NaN);       //false
        alert(isNaN(NaN));       //true
        alert(isNaN(10));        //false � 10 is a number
        alert(isNaN("10"));      //false � can be converted to number 10
        alert(isNaN("blue"));    //true � cannot be converted to a number
        alert(isNaN(true));      //false � can be converted to number 1

 

 

 

Number()将何种数据类型转换成数值

        var num1 = Number("Hello world!");  //NaN
        var num2 = Number("");              //0
        var num3 = Number("000011");        //11
        var num4 = Number(true);            //1

        alert(num1);
        alert(num2);
        alert(num3);
        alert(num4);

parseInt()可以识别出整型格式(二、八、十、十六进制)

        var num1 = parseInt("1234blue");    //1234
        var num2 = parseInt("");            //NaN
        var num3 = parseInt("0xA");         //10 - hexadecimal
        var num4 = parseInt(22.5);          //22
        var num5 = parseInt("70");          //70 - decimal
        var num6 = parseInt("0xf");         //15 � hexadecimal

paseInt()如果指定了第二个参数,字符串可以不必带0、0x前缀

        var num1 = parseInt("10", 2);         //2 � parsed as binary
        var num2 = parseInt("10", 8);         //8 � parsed as octal
        var num3 = parseInt("10", 10);        //10 � parsed as decimal
        var num4 = parseInt("10", 16);        //16 � parsed as hexadecimal

 

 

 

toString()返回一个值的字符串表现

        var age = 11;
        var ageAsString = age.toString();    //the string "11"
        var found = true;
        var foundAsString = found.toString(); //the string "true"

        alert(ageAsString);
        alert(typeof ageAsString);
        alert(foundAsString);
        alert(typeof foundAsString);

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"

toString()不能转换null和undefined的值,而String()可以转换任意类型的值

        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"

 

 

 

 

 

“++”和“--”会将运算对象先转换成数值再进行递增、递减

        var s1 = "2";
        var s2 = "z";
        var b = false;
        var f = 1.1;
        var o = { 
            valueOf: function() {
                return -1;
            }
        };
        
        s1++;   //value becomes numeric 3
        s2++;   //value becomes NaN
        b++;    //value becomes numeric 1
        f--;    //value becomes 0.10000000000000009
        o--;    //value becomes numeric �2  

        alert(s1);
        alert(s2);
        alert(b);
        alert(f);
        alert(o);

一元加减运算会将值转换成数值

        var s1 = "01";
        var s2 = "1.1";
        var s3 = "z";
        var b = false;
        var f = 1.1;
        var o = { 
            valueOf: function() {
                return -1;
            }
        };
        
        s1 = +s1;   //value becomes numeric 1
        s2 = +s2;   //value becomes numeric 1.1
        s3 = +s3;   //value becomes NaN
        b = +b;     //value becomes numeric 0
        f = +f;     //no change, still 1.1
        o = +o;     //value becomes numeric �1

        alert(s1);
        alert(s2);
        alert(s3);
        alert(b);
        alert(f);
        alert(o);
        var s1 = "01";
        var s2 = "1.1";
        var s3 = "z";
        var b = false;
        var f = 1.1;
        var o = { 
            valueOf: function() {
                return -1;
            }
        };
        
        s1 = -s1;   //value becomes numeric -1
        s2 = -s2;   //value becomes numeric -1.1
        s3 = -s3;   //value becomes NaN
        b = -b;     //value becomes numeric 0
        f = -f;     //change to �1.1
        o = -o;     //value becomes numeric 1

        alert(s1);
        alert(s2);
        alert(s3);
        alert(b);
        alert(f);
        alert(o);

“<<<”、“>>>”是无符号左移和无符号右移运算符

        var oldValue = 64;               //equal to binary 1000000
        var newValue = oldValue >>> 5;   //equal to binary 10 which is decimal 2
        alert(newValue);                 //2
        var oldValue = -64;              //equal to binary 11111111111111111111111111000000
        var newValue = oldValue >>> 5;   //equal to decimal 134217726
        alert(newValue);                 //134217726

“!”运算也是先将操作对象转换成布尔值在进行取非

“!!”相当于是Boolean()操作

   
        alert(!false);      //true
        alert(!"blue");     //false
        alert(!0);          //true
        alert(!NaN);        //true
        alert(!"");         //true
        alert(!12345);      //false

        alert(!!"blue");     //true
        alert(!!0);          //false
        alert(!!NaN);        //false
        alert(!!"");         //false
        alert(!!12345);      //true

逻辑与和逻辑或运算都存在逻辑短路现象

        var found = true;
        var result = (found && someUndeclaredVariable);    //error occurs here
        alert(result);    //this line never executes
        var found = false;
        var result = (found && someUndeclaredVariable);    //no error
        alert(result);    //works
        var found = true;
        var result = (found || someUndeclaredVariable);    //no error
        alert(result);    //works
        var found = false;
        var result = (found || someUndeclaredVariable);    //error occurs here
        alert(result);    //this line never executes

加性操作优先转换成字符串,减性操作优先转换成数值

        var result1 = 5 + 5;     //two numbers
        alert(result1);           //10
        var result2 = 5 + "5";   //a number and a string
        alert(result2);     


        var num1 = 5;
        var num2 = 10;
        var message = "The sum of 5 and 10 is " + num1 + num2;
        alert(message);    //"The sum of 5 and 10 is 510"
        var num1 = 5;
        var num2 = 10;
        var message = "The sum of 5 and 10 is " + (num1 + num2);
        alert(message);    //"The sum of 5 and 10 is 15"

全等“===”只在两个操作数未经转换之前就相等的情况下(数据类型一样)返回true,与之对应的是“!==”

        var result1 = ("55" == 55);    //true � equal because of conversion
        var result2 = ("55" === 55);   //false � not equal because different data types
       
        var result1 = ("55" != 55);    //false � equal because of conversion
        var result2 = ("55" !== 55);   //true � not equal because different data types
       

break与标签配合使用,跳出最外层循环

        var num = 0;
        
        outermost:
        for (var i=0; i < 10; i++) {
             for (var j=0; j < 10; j++) {
                if (i == 5 && j == 5) {
                    break outermost;
                }
                num++;
            }
        }

continue与标签配合使用,使跳出最外层之外的循环

        var num = 0;
        
        outermost:
        for (var i=0; i < 10; i++) {
             for (var j=0; j < 10; j++) {
                if (i == 5 && j == 5) {
                    continue outermost;
                }
                num++;
            }
        }
        
        alert(num);    //95  i==5的那一层执行到5时跳出内层循环,继续执行外层循环

switch()括号内可以是任何数据类型

        switch ("hello world") {
            case "hello" + " world": 
                alert("Greeting was found.");
                break;
            case "goodbye": 
                alert("Closing was found.");
                break;
            default: 
                alert("Unexpected message was found.");

arguments对象可以和命名参数一起使用

        function doAdd(num1, num2) {
            if(arguments.length == 1) {
                alert(num1 + 10);
            } else if (arguments.length == 2) {
                alert(arguments[0] + num2);
            }
        }

        
        doAdd(10);        //20
        doAdd(30, 20);    //50

JavaScript没有函数重载,后定义的同名函数会覆盖前面的函数

        function addSomeNumber(num){
            return num + 100;
        }
        
        function addSomeNumber(num) {
            return num + 200;
        }
        
        var result = addSomeNumber(100);    //300
        alert(result);

 for-in语句

        for (var propName in window) {
             document.write(propName);
             document.write("<br />");
        }

 2020-04-23    18:29:22

posted @ 2020-04-23 18:13  WP-WangPin  阅读(121)  评论(0编辑  收藏  举报