Java教程

JavaScript 基础

本文主要是介绍JavaScript 基础,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

文章目录

    • 1 基础知识
      • 1.1 变量、数据类型
        • 1.1.1 变量
        • 1.1.2 数据类型
      • 1.2 运算与比较
        • 1.2.1 运算
        • 1.2.2 比较
      • 1.3 条件、循环
        • 1.3.1 if
        • 1.3.2 switch
        • 1.3.3 for循环
        • 1.3.4 while
        • 1.3.5 break、continue
      • 1.4 函数
        • 1.4.1 函数定义
        • 1.4.2 函数参数
        • 1.4.3 函数调用
        • 1.4.4 闭包
      • 1.5 其他
        • 1.5.1 注释
        • 1.5.2 throw、try、catch
        • 1.5.3 null、undefined

1 基础知识

1.1 变量、数据类型

1.1.1 变量

  1. 基本例子

    var lastname="Doe",
    age=30,
    job="carpenter";
    
  2. 一条语句中声明的多个变量不可以同时赋同一个值

    var x,y,z=1;     //其中 x, y 为 undefined, z 为 1
    
  3. ES2015(ES6) 新增加了两个重要的 JavaScript 关键字: letconst。const 定义常量与使用 let 定义的变量相似:二者都是块级作用域

    • let 声明的变量只在 let 命令所在的代码块内有效

      例子:

      var i = 5;
      for (var i = 0; i < 10; i++) {
          // 一些代码...
      }
      // 这里输出 i 为 10
      
      let i = 5;
      for (let i = 0; i < 10; i++) {
          // 一些代码...
      }
      // 这里输出 i 为 5
      
    • const 声明一个只读的常量,一旦声明,常量的值就不能改变

      例子:

      const PI = 3.141592653589793;
      PI = 3.14;      // 报错
      PI = PI + 10;   // 报错
      
  4. JavaScript 中,var 关键字定义的变量可以在使用后声明,也就是变量可以先使用再声明(变量提升)。let, const 关键字定义的变量则不可以在使用后声明,也就是变量需要先声明再使用。

    例子:

    // 在这里可以使用 carName1 变量
    var carName1;
    // 在这里不可以使用 carName2 变量
    let carName2;
    // 在这里不可以使用 carName3 变量
    const carName3 = "Volvo";
    

1.1.2 数据类型

  1. 值类型(基本类型):字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol。

    例子:

    var carname="Volvo XC60";
    var x1=34.00;      //JavaScript 只有一种数字类型。数字可以带小数点,也可以不带
    var x=true;
    
  2. 引用数据类型:对象(Object)、数组(Array)、函数(Function)。

    对象由花括号分隔。在括号内部,对象的属性以名称和值对的形式 (name : value) 来定义。属性由逗号分隔。

    对象例子:

    var person = {
        firstName: "John",
        lastName : "Doe",
        id : 5566,
        fullName : function()     //对象的方法
    	{
           return this.firstName + " " + this.lastName;
        }
    };
    //对象属性有两种寻址方式,如下所示
    name=person.lastname;     
    name=person["lastname"];
    

    数组例子:

    var cars=new Array();     //等价于var cars=new Array;
    cars[0]="Saab";
    cars[1]="Volvo";
    cars[2]="BMW";
    //condensed array
    var cars=new Array("Saab","Volvo","BMW");
    //literal array
    var cars=["Saab","Volvo","BMW"];
    

1.2 运算与比较

1.2.1 运算

​ 大部分同C/C++。

  1. 5 / 2 = 2.5
  2. 支持字符串的"+"

1.2.2 比较

​ 大部分同C/C++,也支持条件运算符。

运算符描述
==等于
===绝对等于(值和类型均相等)
!=不等于
!==不绝对等于(值和类型有一个不相等,或两个都不相等)

1.3 条件、循环

1.3.1 if

if (time<10)
{
    document.write("<b>早上好</b>");
}
else if (time>=10 && time<20)
{
    document.write("<b>今天好</b>");
}
else
{
    document.write("<b>晚上好!</b>");
}

1.3.2 switch

var d=new Date().getDay();
switch (d)
{
    case 6:x="今天是星期六";
    break;
    case 0:x="今天是星期日";
    break;
    default:
    x="期待周末";
}
document.getElementById("demo").innerHTML=x;

1.3.3 for循环

​ 例子1:

for (var i=0;i<cars.length;i++)
{ 
    document.write(cars[i] + "<br>");
}

​ 例子2:

var person={fname:"Bill",lname:"Gates",age:56}; 
 
for (x in person)  // x 为属性名
{
    txt=txt + person[x];
}

1.3.4 while

​ 例子1:

while (i<5)
{
    x=x + "The number is " + i + "<br>";
    i++;
}

​ 例子2:

do
{
    x=x + "The number is " + i + "<br>";
    i++;
}
while (i<5);

1.3.5 break、continue

  • break 语句用于跳出循环

  • continue 用于跳过循环中的一个迭代

  • continue 语句(带有或不带标签引用)只能用在循环中;break 语句(不带标签引用),只能用在循环或 switch 中;通过标签引用,break 语句可用于跳出任何 JavaScript 代码块

    例子:

    cars=["BMW","Volvo","Saab","Ford"];
    list: 
    {
        document.write(cars[0] + "<br>"); 
        document.write(cars[1] + "<br>"); 
        document.write(cars[2] + "<br>"); 
        break list;
        document.write(cars[3] + "<br>"); 
        document.write(cars[4] + "<br>"); 
        document.write(cars[5] + "<br>"); 
    }
    

1.4 函数

1.4.1 函数定义

  • 函数声明:

    分号是用来分隔可执行JavaScript语句。 函数声明不以分号结束,因为它不是一个可执行语句。

    function myFunction(a, b) {
        return a * b;
    }
    
  • 函数表达式

    匿名函数存储在变量中,不需要函数名称,通常通过变量名来调用。 匿名函数以分号结尾,因为它是一个执行语句。

    var x = function (a, b) {return a * b};
    var z = x(4, 3);
    
  • JavaScript 函数构造器

    不推荐。在 JavaScript 中,很多时候,需要避免使用 new 关键字

    var myFunction = new Function("a", "b", "return a * b");
    var x = myFunction(4, 3);
    
  • 函数提升

    提升应用在变量的声明与函数的声明。因此,函数可以在声明之前调用。使用表达式定义函数时无法提升。

  • 自调用函数

    如果表达式后面紧跟 () ,则会自动调用。不能自调用声明的函数。

    (function () {
        var x = "Hello!!";      // 我将调用自己
    })();  // 通过添加括号,来说明它是一个函数表达式
    

    以上函数实际上是一个匿名自我调用的函数 (没有函数名)。

  • 箭头函数

    有的箭头函数都没有自己的 this,故不适合定义一个对象的方法。箭头函数是不能提升的,所以需要在使用之前定义。

    // ES5
    var x = function(x, y) {
         return x * y;
    }
     
    // ES6
    const x = (x, y) => x * y;
    

1.4.2 函数参数

​ JavaScript 函数对参数的值没有进行任何的检查。ES5 中如果函数在调用时未提供隐式参数,参数会默认设置为: undefined。ES6 支持函数带有默认参数。

  • 显式参数——类似于C语言中的形参

  • 隐式参数——类似于C语言中的实参

  • 如果函数调用时设置了过多的参数,参数将无法被引用,因为无法找到对应的参数名。 只能使用 arguments 对象来调用。JavaScript 函数有个内置的对象 arguments 对象,argument 对象包含了函数调用的参数数组。

    x = findMax(1, 123, 500, 115, 44, 88);
     
    function findMax() {  //利用 arguments 对象可以很方便地找到最大的一个参数的值
        var i, max = arguments[0];
        
        if(arguments.length < 2) return max;
     
        for (i = 0; i < arguments.length; i++) {
            if (arguments[i] > max) {
                max = arguments[i];
            }
        }
        return max;
    }
    
  • 传值

    隐式参数的改变在函数外是不可见的。

  • 传引用

    在JavaScript中,可以引用对象的值。因此我们在函数内部修改对象的属性就会修改其初始的值。

    修改对象属性在函数外是可见的

1.4.3 函数调用

​ JavaScript 函数有 4 种调用方式,每种方式的不同在于 this 的初始化。一般而言,在Javascript中,this指向函数执行时的当前对象。

  • 普通调用(当函数没有被自身的对象调用时 this 的值就会变成全局对象)

    function myFunction(a, b) {
        return a * b;
    }
    //在浏览器中的页面对象是浏览器窗口(window 对象)。以上函数会自动变为 window 对象的函数。
    //故myFunction() 和 window.myFunction() 是一样的
    myFunction(10, 2);           
    window.myFunction(10, 2);   
    
    function myFunction() {
        return this;
    }
    myFunction();                // 返回 window 对象
    
  • 函数作为方法调用(函数作为对象方法调用,会使得 this 的值成为对象本身)

    var myObject = {
        firstName:"John",
        lastName: "Doe",
        fullName: function () {
            return this;
        }
    }
    myObject.fullName();          // 返回所有者对象
    
  • 使用构造函数调用函数

    构造函数的调用会创建一个新的对象。新对象会继承构造函数的属性和方法。构造函数中 this 关键字没有任何的值,this 的值在函数调用实例化对象(new object)时创建。

    // 构造函数:
    function myFunction(arg1, arg2) {
        this.firstName = arg1;
        this.lastName  = arg2;
    }
    // This    creates a new object
    var x = new myFunction("John","Doe");
    x.firstName;                             // 返回 "John"
    
  • 作为函数方法调用函数

    在 JavaScript 中, 函数是对象。JavaScript 函数有它的属性和方法。call() 和 apply() 是预定义的函数方法。 两个方法可用于调用函数,两个方法的第一个参数必须是对象本身。apply传入的是一个参数数组,也就是将多个参数组合成为一个数组传入,而call则作为call的参数传入(从第二个参数开始)。

    function myFunction(a, b) {
        return a * b;
    }
    myObject = myFunction.call(myObject, 10, 2);     // 返回 20
    
    myArray = [10, 2];
    myObject = myFunction.apply(myObject, myArray);  // 返回 20
    

1.4.4 闭包

​ 私有变量可以用到闭包。

  • 计数器困境

    var counter = 0;
     
    function add() {
       return counter += 1;
    }
     
    add();
    add();
    add();
     
    // 计数器现在为 3
    

    问题:页面上的任何脚本都能改变计数器,即便没有调用 add() 函数。

  • 解决办法

    var add = (function () {
        var counter = 0;
        return function () {return counter += 1;}
    })();
     
    add();
    add();
    add();
     
    // 计数器为 3
    
    • 自我调用函数只执行一次。设置计数器为 0。并返回函数表达式。add变量可以作为一个函数使用。非常棒的部分是它可以访问函数上一层作用域的计数器。这个叫作 JavaScript 闭包,它使得函数拥有私有变量变成可能。
    • 计数器受匿名函数的作用域保护,只能通过 add 方法修改。
    • 闭包是一种保护私有变量的机制,在函数执行时形成私有的作用域,保护里面的私有变量不受外界干扰。直观的说就是形成一个不销毁的栈环境。

1.5 其他

1.5.1 注释

  • 单行注释以 // 开头。
  • 多行注释以 /* 开始,以 */ 结尾。

1.5.2 throw、try、catch

  • try 语句测试代码块的错误

  • catch 语句处理错误

  • throw 语句创建自定义错误,抛出的异常可以是 JavaScript 字符串、数字、逻辑值或对象

  • finally 语句在 try 和 catch 语句之后,无论是否有触发异常,该语句都会执行

    基本例子:

function myFunction() {
  var message, x;
  message = document.getElementById("p01");
  message.innerHTML = "";
  x = document.getElementById("demo").value;
  try { 
    if(x == "") throw "值是空的";
    if(isNaN(x)) throw "值不是一个数字";
    x = Number(x);
    if(x > 10) throw "太大";
    if(x < 5) throw "太小";
  }
  catch(err) {
    message.innerHTML = "错误: " + err + ".";
  }
  finally {
    document.getElementById("demo").value = "";
  }
}

1.5.3 null、undefined

  • 可以设置为 null 来清空对象

  • 任何变量都可以通过设置值为 undefined 来清空,类型为 undefined

  • typeof [1,2,3,4]             // 返回 object
    
  • null 和 undefined 的值相等,但类型不等

    typeof undefined             // undefined
    typeof null                  // object
    null === undefined           // false
    null == undefined            // true
    
这篇关于JavaScript 基础的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!