前端基础之JavaScript

一、JavaScript的历史


二、ECMAScript

注:ES6就是指ECMAScript 6。

尽管 ECMAScript 是一个重要的标准,但它并不是 JavaScript 唯一的部分,当然,也不是唯一被标准化的部分。实际上,一个完整的 JavaScript 实现是由以下 3 个不同部分组成的:

    核心(ECMAScript) 

    文档对象模型(DOM) Document object model (整合js,css,html)

    浏览器对象模型(BOM) Broswer object model(整合js和浏览器)

简单地说,ECMAScript 描述了JavaScript语言本身的相关内容。

    JavaScript 是脚本语言

    JavaScript 是一种轻量级的编程语言。

    JavaScript 是可插入 HTML 页面的编程代码。

    JavaScript 插入 HTML 页面后,可由所有的现代浏览器执行。


三、JavaScript引入方式

1、在HTML文件的Script标签内写代码

        <script>

          // 在这里写你的JS代码

        </script>

2、HTML文件引入额外的JS文件

    <script src="myscript.js"></script>


四、JavaScript语言规范

1、注释(注释是代码之母)

    // 这是单行注释

    /*

        这是多行注释

    */

2、结束符

    JavaScript中的语句要以分号(;)为结束符。


五、JavaScript语言基础

1、变量声明

    JavaScript的变量名可以使用_,数字,字母,$组成,不能以数字开头。

    声明变量使用 var 变量名; 的格式来进行声明

        var name = "Alex";

        var age = 18;

注意:

    变量名是区分大小写的。

    推荐使用驼峰式命名规则。

    保留字不能用做变量名。


六、JavaScript数据类型

1、JavaScript拥有动态类型

    var x;  // 此时x是undefined

    var x = 1;  // 此时x是数字

    var x = "Alex"  // 此时x是字符串 

2、数字类型

    JavaScript不区分整型和浮点型,就只有一种数字类型。

    var a = 12.34;

    var b = 20;

    var c = 123e5;  // 12300000

    var d = 123e-5;  // 0.00123

3、还有一种NaN,表示不是一个数字(Not a Number)。

常用方法:

    parseInt("123")  // 返回123

    parseInt("ABC")  // 返回NaN,NaN属性是代表非数字值的特殊值。该属性用于指示某个值不是数字。

    parseFloat("123.456")  // 返回123.456

4、字符串

    var a = "Hello"

    var b = "world;

    var c = a + b; 

    console.log(c);  // 得到Helloworld

常用方法:

方法说明
.length返回长度
.trim()移除空白
.trimLeft()移除左边的空白
.trimRight()移除右边的空白
.charAt(n)返回第n个字符
.concat(value, ...)拼接
.indexOf(substring, start)子序列位置
.substring(from, to)根据索引获取子序列
.slice(start, end)切片
.toLowerCase()小写
.toUpperCase()大写
.split(delimiter, limit)分割


拼接字符串一般使用“+”

补充:slice和ubstirng的区别:

        string.slice(start, stop)和string.substring(start, stop):

        两者的相同点:

            如果start等于end,返回空字符串

            如果stop参数省略,则取到字符串末

            如果某个参数超过string的长度,这个参数会被替换为string的长度

        substirng()的特点:

            如果 start > stop ,start和stop将被交换

            如果参数是负数或者不是数字,将会被0替换

        silce()的特点:

            如果 start > stop 不会交换两者

            如果start小于0,则切割从字符串末尾往前数的第abs(start)个的字符开始(包括该位置的字符)

            如果stop小于0,则切割在从字符串末尾往前数的第abs(stop)个字符结束(不包含该位置字符)

 5、布尔类型  区别于Python,true和false都是小写。

    var a = true;

    var b = false;

    ""(空字符串)、0、null、undefined、NaN都是false。

6、数组 类似于Python中的列表。

    var a = [123, "ABC"];

    console.log(a[1]);  // 输出"ABC"

     常用方法:

方法说明
.length数组的大小
.push(ele)尾部追加元素
.pop()获取尾部的元素
.unshift(ele)头部插入元素
.shift()头部移除元素
.slice(start, end)切片
.reverse()反转
.join(seq)将数组元素连接成字符串
.concat(val, ...)连接数组
.sort()排序

 补充:关于sort的问题:

        如果调用sort方法时没有传入参数,将按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序。要实现这一点,首先应把数组的元素都转换成字符串(如有必要),以便进行比较。

        如果想按照其他标准进行排序,就需要提供比较函数,该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。比较函数应该具有两个参数 a 和 b,其返回值如下:

        若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。

        若 a 等于 b,则返回 0。

        若 a 大于 b,则返回一个大于 0 的值。

        // 根据上面的规则自行实现一个排序函数:

        function sortNumber(a,b) {

          return a - b

        }

        // 调用sort方法时将定义好的排序函数传入即可。

        stringObj.sort(sortNumber)

可以使用以下方式遍历数组中的元素:

    var a = [10, 20, 30, 40];

    for (var i=0;i<a.length;i++) {

      console.log(i);

    }

7、null和undefined

    null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;

    undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。

    null表示变量的值是空,undefined则表示只声明了变量,但还没有赋值。

8、类型查询

typeof是一个一元运算符(就像++,--,!,- 等一元运算符),不是一个函数,也不是一个语句。

    typeof "abc"  // "string"

    typeof null  // "object"

    typeof true  // "boolean"

    typeof 123 // "number"

对变量或值调用 typeof 运算符将返回下列值之一:

    undefined - 如果变量是 Undefined 类型的

    boolean - 如果变量是 Boolean 类型的

    number - 如果变量是 Number 类型的

    string - 如果变量是 String 类型的

    object - 如果变量是一种引用类型或 Null 类型的


六、运算符

1、算数运算符

    + - * / % ++ --

2、比较运算符

    > >= < <= != == === !==

注意:

    1 == “1”  // true

    1 === "1"  // false

3、逻辑运算符

    && || !

4、赋值运算符

    = += -= *= /=


七、流程控制

1、if-else

    var a = 10;

    if (a > 5){

      console.log("yes");

    }else {

      console.log("no");

    }

2、if-else if-else 

    var a = 10;

    if (a > 5){

      console.log("a > 5");

    }else if (a < 5) {

      console.log("a < 5");

    }else {

      console.log("a = 5");

    }

3、switch

    var day = new Date().getDay();

    switch (day) {

      case 0:

      console.log("Sunday");

      break;

      case 1:

      console.log("Monday");

      break;

    default:

      console.log("...")

    }

注意:switch中的case子句通常都会加break语句,否则程序会继续执行后续case中的语句。

4、for

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

      console.log(i);

    }

5、while

    var i = 0;

    while (i < 10) {

      console.log(i);

      i++;

    }

6、三元运算

    var a = 1;

    var b = 2;

    var c = a > b ? a : b


八、函数

1、函数定义

JavaScript中的函数和Python中的非常类似,只是定义方式有点区别。

// 普通函数定义

    function f1() {

      console.log("Hello world!");

    }

// 带参数的函数

    function f2(a, b) {

      console.log(arguments);  // 内置的arguments对象

      console.log(arguments.length);

      console.log(a, b);

    }

// 带返回值的函数

    function sum(a, b){

      return a + b;

    }

    sum(1, 2);  // 调用函数

// 匿名函数方式

    var sum = function(a, b){

      return a + b;

    }

    sum(1, 2);

// 立即执行函数

    (function(a, b){

      return a + b;

    })(1, 2);

2、arguments

    function add(a,b){

      console.log(a+b);

      console.log(arguments.length)

    }

    add(1,2)

3、函数的全局变量和局部变量

局部变量:

    在JavaScript函数内部声明的变量(使用 var)是局部变量,所以只能在函数内部访问它(该变量的作用域是函数内部)。只要函数运行完毕,本地变量就会被删除。

全局变量:

    在函数外声明的变量是全局变量,网页上的所有脚本和函数都能访问它。

变量生存周期:

    JavaScript变量的生命期从它们被声明的时间开始。

    局部变量会在函数运行以后被删除。

    全局变量会在页面关闭后被删除。

4、作用域

首先在函数内部查找变量,找不到则到外层函数查找,逐步找到最外层。

几个例子:

1)

    var city = "BeiJing";

    function f() {

      var city = "ShangHai";

      function inner(){

        var city = "ShenZhen";

        console.log(city);

      }

      inner();

    }

    f();  //输出结果是?ShenZhen

2)

    var city = "BeiJing";

    function Bar() {

      console.log(city);

    }

    function f() {

      var city = "ShangHai";

      return Bar;

    }

    var ret = f();

    ret();  // 打印结果是?Beijing

3)闭包

    var city = "BeiJing";

    function f(){

        var city = "ShangHai";

        function inner(){

            console.log(city);

        }

        return inner;

    }

    var ret = f();

    ret(); // 打印结果是?ShangHai


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章