【JavaScript】笔记(2)— ECMAScript初步(变量,函数,数据类型等相关知识)

  • A+
所属分类:Web前端
摘要

ECMAScript 知识点大杂烩: 1、javascript是一种弱类型语言,没有编译阶段,一个变量可以随意赋值,赋什么类型的值都行。

ECMAScript 知识点大杂烩:


1、javascript是一种弱类型语言,没有编译阶段,一个变量可以随意赋值,赋什么类型的值都行。

2、在JS当中,当一个变量没有手动赋值的时候,系统默认赋值 undefined,undefined 在 JS 中是一个具体存在值.

3、JS 中的变量是一种弱类型的,那么函数应该怎么定义呢?
          语法格式:
                 第一种方式:

                            function 函数名(形式参数列表){
                                函数体;
                            }

                 第二种方式:

                            函数名 = function(形式参数列表){
                                函数体;
                            }

JS中的函数不需要指定返回值类型,返回什么类型都行。

在JS当中,函数的名字不能重名,当函数重名的时候,后声明的函数会将之前声明的同名函数覆盖。

4、全局变量:
            在函数体之外声明的变量属于全局变量,全局变量的生命周期是:
                        浏览器打开时声明,浏览器关闭时销毁,尽量少用。因为全局变量会一直在浏览器的内存当中,耗费内存空间。
                        能使用局部变量尽量使用局部变量。
     局部变量:
           在函数体当中声明的变量,包括一个函数的形参都属于局部变量,
           局部变量的生命周期是:函数开始执行时局部变量的内存空间开辟,函数执行结束之后,局部变量的内存空间释放。
           局部变量生命周期较短。

5、当一个变量声明的时候没有使用 var关键字,那么不管这个变量是在哪里声明的,都是全局变量。

6、JS 中数据类型:

             原始类型:Undefined、Number、String、Boolean、Null

             引用类型:Object以及Object的子类

7、JS 中有一个运算符叫做typeof,这个运算符可以在程序的运行阶段动态的获取变量的数据类型。
          typeof 运算符的语法格式:
                     typeof 变量名

          typeof运算符的运算结果是以下6个字符串之一:注意字符串都是全部小写。

                        "undefined"
                        "number"
                        "string"
                        "boolean"
                        "object"
                        "function"

null属于Null类型,但是typeof运算符的结果是"object"
                        
8、在JS当中比较字符串是否相等使用“==”完成。没有equals。

9、数据类型:

1)Undefined 类型只有一个值,这个值就是 undefined ,当一个变量没有手动赋值,系统默认赋值 undefined 或者也可以给一个变量手动赋值 undefined。

2)Number 类型包括哪些值?

     -1 0 1 2 2.3 3.14 100 .... NaN Infinity(整数、小数、正数、负数、不是数字、无穷大都属于Number类型)

           isNaN() : 结果是true表示不是一个数字,结果是false表示是一个数字。
           parseInt ( ) 函数
           parseFloat ( ) 函数
           Math.ceil ( ) 函数(Math是数学类,数学类当中有一个函数叫做ceil(),作用是向上取整)

     关于NaN (Not a Number,不是一个数字,但属于Number类型),什么情况下结果是一个NaN呢?
            运算结果本来应该是一个数字,最后算完不是一个数字的时候,结果是NaN.

3)JS 中的布尔类型永远都只有两个值:true 和 false。

     在Boolean类型中有一个函数叫做:Boolean()。
            语法格式:
                   Boolean(数据)

     Boolean()函数的作用是将非布尔类型转换成布尔类型。

<script type="text/javascript">     // 规律:“有"就转换成true,"没有"就转换成false.     alert(Boolean(1)); // true     alert(Boolean(0)); // false     alert(Boolean("")); // false     alert(Boolean("abc")); // true     alert(Boolean(null)); // false     alert(Boolean(NaN)); // false     alert(Boolean(undefined)); // false     alert(Boolean(Infinity)); // true </script>

4)String类型:
     在JS当中字符串可以使用单引号,也可以使用双引号。
        var s1 = 'abcdef';
        var s2 = "test";

     在JS当中,怎么创建字符串对象呢?
        两种方式:
            第一种:var s = "abc";
            第二种(使用JS内置的支持类String): var s2 = new String("abc");
        需要注意的是:String是一个内置的类,可以直接用,String的父类是Object。

     关于String类型的常用属性和函数?

         常用属性:
            length 获取字符串长度

         常用函数:
            indexOf              获取指定字符串在当前字符串中第一次出现处的索引
            lastIndexOf        获取指定字符串在当前字符串中最后一次出现处的索引
            replace               替换
            substr                 截取子字符串
            substring            截取子字符串
            toLowerCase      转换小写
            toUpperCase      转换大写
            split                    拆分字符串

 

<script type="text/javascript">     // replace (注意:只替换了第一个),继续调用replace方法,就会替换第“二”个.     alert("name=value%name=value%name=value".replace("%","&")); // name=value&name=value%name=value         // 想全部替换需要使用正则表达式.     alert("name=value%name=value%name=value".replace("%","&").replace("%", "&")); // name=value&name=value&name=value         // 考点:经常问 substr和substring的区别?         // substr(startIndex, length)     alert("abcdefxyz".substr(2,4)); //cdef     // substring(startIndex, endIndex) 注意:不包含endIndex     alert("abcdefxyz".substring(2,4)); //cd     </script> 

5)在JS当中怎么定义类?怎么new对象?

     定义类的语法:

        第一种方式:
            function 类名(形参){
                
            }

        第二种方式:
            类名 = function(形参){
                
            }

     创建对象的语法:
        new 构造方法名(实参); 

     Object类包括哪些属性?

          prototype属性(常用的,主要是这个):作用是给类动态的扩展属性和函数。
          constructor属性

 

<script type="text/javascript">    // 这种方式就表示把sayHello当做一个类来创建对象.    var obj = new sayHello(); // obj是一个引用,保存内存地址指向堆中的对象.        // 定义一个学生类    function Student(){ 	   alert("Student.....");    }        // 当做普通函数调用    Student();        // JS中的类的定义,同时又是一个构造函数的定义,在JS中类的定义和构造函数的定义是放在一起来完成的.    function User(a, b, c){ // a b c是形参,属于局部变量. 	   // 声明属性 (this表示当前对象),User类中有三个属性:sno/sname/sage 	   this.sno = a; 	   this.sname = b; 	   this.sage = c;    }        // 创建对象    var u1 = new User(111, "zhangsan", 30);    // 访问对象的属性    alert(u1.sno);    alert(u1.sname);    alert(u1.sage);        // 访问一个对象的属性,还可以使用这种语法    alert(u2["sno"]);    alert(u2["sname"]);    alert(u2["sage"]);       //定义类的另一种语法:    Product = function(pno,pname,price){ 	   // 属性 	   this.pno = pno; 	   this.pname = pname; 	   this.price = price; 	   // 函数 	   this.getPrice = function(){ 		   return this.price; 	   }    }        var xigua = new Product(111, "西瓜", 4.0);    var pri = xigua.getPrice();    alert(pri); // 4.0        // 可以通过prototype这个属性来给类动态扩展属性以及函数    Product.prototype.getPname = function(){ 	   return this.pname;    }        // 调用后期扩展的getPname()函数    var pname = xigua.getPname();    alert(pname)     // 给String扩展一个函数    String.prototype.suiyi = function(){ 	   alert("这是给String类型扩展的一个函数,叫做suiyi");    }    "abc".suiyi();     </script>

 

10、null NaN undefined这三个值有什么区别 :

<script type="text/javascript"> 	// == 是等同运算符 	alert(1 == true); // true 	alert(1 === true); // false 	 	// null NaN undefined 数据类型不一致. 	alert(typeof null); // "object" 	alert(typeof NaN); // "number" 	alert(typeof undefined); // "undefined" 	 	// null和undefined可以等同. 	alert(null == NaN); // false 	alert(null == undefined); // true 	alert(undefined == NaN); // false 	 	/* 	    在JS当中有两个比较特殊的运算符 	    ==(等同运算符:只判断值是否相等) 	    ===(全等运算符:既判断值是否相等,又判断数据类型是否相等) 	*/ 	alert(null === NaN); // false 	alert(null === undefined); // false 	alert(undefined === NaN); // false </script>