JavaScript基础笔记

JavaScript

为何学习 JavaScript?

JavaScript 是 web 开发者必学的三种语言之一:

  • HTML 定义网页的内容
  • CSS 规定网页的布局
  • JavaScript 对网页行为进行编程

JavaScript 介绍

JavaScript 是一门跨平台、面向对象的脚本语言,它能使网页可交互(例如拥有复杂的动画,可点击的按钮,通俗的菜单等)。另外还有高级的服务端 Javascript 版本,例如 Node.js,它可以让你在网页上添加更多功能,不仅仅是下载文件(例如在多台电脑之间的协同合作)。在宿主环境(例如 web 浏览器)中,JavaScript 能够通过其所连接的环境提供的编程接口进行控制。

JavaScript 内置了一些对象的标准库,比如数组(Array),日期(Date),数学(Math)和一套核心语句,包括运算符、流程控制符以及声明方式等。JavaScript 的核心部分可以通过添加对象来扩展语言以适应不同用途;例如:

  • 客户端的 JavaScript 通过提供对象,控制浏览器及其文档对象模型(DOM),来扩展语言核心。例如:客户端的拓展代码允许应用程序将元素放在某个 HTML 表单中,并且支持响应用户事件,比如鼠标点击、表单提交和页面导航。
  • 服务端的 JavaScript 则通过提供有关在服务器上运行 JavaScript 的对象来可扩展语言核心。例如:服务端版本直接支持应用和数据库通信,提供应用不同调用间的信息连续性,或者在服务器上执行文件操作。

这意味着,在浏览器中,JavaScript 可以改变网页(DOM)的外观与样式。同样地,在服务器上,Node.js 中的 JavaScript 可以对浏览器上编写的代码发出的客户端请求做出响应。

JavaScript 的使用

在HTML中,JavaScript 代码必须位于<script></script> 标签之间。

实例

<script>
    document.getElementById("demo").innerHTML = "这是我的第一段 javascript";
</script>

基础语法

书写规范

掌握了js的引入方式,那么接下来我们需要学习js的书写了,首先需要掌握的是js的书写语法,语法规则如下:

  • 区分大小写:与 Java 一样,变量名、函数名以及其他一切东西都是区分大小写的 。

  • 每行结尾的分号可有可无 【推荐要么全都写,要么全都不写】。

  • 大括号表示代码块 。

  • 注释:

    • 单行注释:// 注释内容 快捷键Ctrl+/

    • 多行注释:/* 注释内容 */ 快捷键 Shift+Ctrl+/

我们需要借助js中3钟输出语句,来演示书写语法:

api描述
window.alert(…)警告框
document.write(…)在HTML 输出内容
console.log(…)写入浏览器控制台

接下来我们就通过VS Code,来演示一些上述的3种输出语句的书写语法

第一步:在VS Code中创建名为 02.JS-基础语法-输出语句.html的文件

第二步:按照基本语法规则,编写3种输出语句的代码,并且添加注释,具体代码如下;

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>JS-基本语法-输出语句</title>
</head>
<body>
	
    <script>
        //方式一: 写入浏览器的body区域
        document.write("Hello JS (document.write)");

        //方式二: 弹出框
        window.alert("Hello JS (window.alert)");

        //方式三: 控制台
        console.log("Hello JS (console.log)")
    </script>
</body>
</html>

声明变量

Let

基本的书写语法我们清楚了之后,接下来,我们再来讲解JS中的变量。在js中,变量的声明和java中还是不同的。

  • JS中主要通过 let 关键字来声明变量的。
  • JS是一门弱类型语言,变量是可以存放不同类型的值的。
  • 变量名需要遵循如下规则:
    • 组成字符可以是任何字母、数字、下划线(_)或美元符号($),且数字不能开头
    • 变量名严格区分大小写,如:name和Name是不同的变量
    • 不能使用关键字作为变量名,如:let、if、for等

变量的声明示例如下所示:

<script>
    //变量
    let a = 20;
    a = "Hello";
    alert(a);
</script>

上述的示例中,大家会看到变量a既可以存数字,又可以存字符串。 因为JS是弱类型语言。

const

在JS中,如果声明一个场景,需要使用const关键字。一旦声明,常量的值就不能改变 (不可以重新赋值)。

如下所示:

<body>

    <script>
        //常量
        const PI = 3.14;
        PI = 3.15;
        alert(PI);
    </script>
</body>

注意:

在早期的JS中,声明变量还可以使用 var 关键字来声明。例如:

<body>

    <script>
         //var声明变量
		var name = "A";
		name = "B";
		alert(name);
        
         var name = "C"
         alert(name);
    </script>
</body>

打开浏览器运行之后,大家会发现,可以正常执行,第一次弹出 B,第二次弹出 C 。我们看到 name变量重复声明了,但是呢,如果使用var关键字,是没有问题的,可以重复声明。

var声明的变量呢,还有一些其他不严谨的地方,这里就不再一一列举了,所以这个声明变量的关键字,并不严谨 【不推荐】。

数据类型

虽然JS是弱数据类型的语言,但是JS中也存在数据类型,JS中的数据类型分为 :原始数据类型 和 引用数据类型。那这部分,我们先来学习原始数据类型,主要包含以下几种类型:

数据类型描述
number数字(整数、小数、NaN(Not a Number))
string字符串,单双引(‘…’)、双引号(“…”)、反引号(`…`)皆可,正常使用推荐单引号
boolean布尔。true,false
null对象为空。 JavaScript 是大小写敏感的,因此 null、Null、NULL是完全不同的
undefined当声明的变量未初始化时,该变量的默认值是 undefined

使用typeof 关键字可以返回变量的数据类型,接下来我们需要通过书写代码来演示js中的数据类型

第一步:在VS Code中创建名为 04.JS-基础语法-数据类型.html 的文件

第二步:编写如下代码,然后直接挨个观察数据类型:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>JS-数据类型</title>
</head>
<body>

    <script>
        //原始数据类型
        alert(typeof 3); //number
        alert(typeof 3.14); //number

        alert(typeof "A"); //string
        alert(typeof 'Hello');//string

        alert(typeof true); //boolean
        alert(typeof false);//boolean

        alert(typeof null); //object 

        var a ;
        alert(typeof a); //undefined

    </script>
</body>
</html>

对于字符串类型的数据,除了可以使用双引号(“…”)、单引号(‘…’)以外,还可以使用反引号 (`…`) 。 而使用反引号引起来的字符串,也称为 模板字符串。

  • 模板字符串的使用场景:拼接字符串和变量。
  • 模板字符串的语法:
    • `…` :反引号 (英文输入模式下键盘 tab 键上方波浪线 ~ 那个键)
    • 内容拼接时,使用 ${ } 来引用变量

具体示例如下:

  <script>
    let name = 'Tom';
    let age = 18;
    console.log('大家好, 我是新入职的' + name + ', 今年' + age + '岁了, 请多多关照'); //原始方式 , 手动拼接字符串
    console.log(`大家好, 我是新入职的${name}, 今年${age}岁了, 请多多关照`); //使用模板字符串方式拼接字符串
  </script>

运算符

那接下来,我们再来介绍JS中的运算符。JS中的运算规则绝大多数还是和JAVA中是一致的,具体运算符如下:

运算规则运算符
算术运算符+ , - , * , / , % , ++ , –
赋值运算符= , += , -= , *= , /= , %=
比较运算符> , < , >= , <= , != , == , 注意 == 会进行类型转换,=== 不会进行类型转换
逻辑运算符&& , || , !
三元运算符条件表达式 ? true_value: false_value

上述所罗列的这些运算符中,绝大部分的运算符和Java中的使用方式、含义都是一样的。那这里,我们主要介绍一下 = 、= 的区别:

  • = 是赋值操作
  • == 会在比较时,判断左右两边的值是否相等 (会自动进行类型转换)
  • === 全等,在比较时,判断左右两边的类型和值是否都相等,都相等才为true(不会进行类型转换)

接下来我们通过代码来演示JS中的运算法,主要记忆JS中和JAVA中不一致的地方

第一步:在VS Code中创建名为05. JS-基础语法-运算符.html的文件

第二步:编写代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>JS-运算符</title>
</head>
<body> 

    <script>
         var age = 20;
         var _age = "20";
         var $age = 20;

         alert(age == _age); //true ,只比较值
         alert(age === _age); //false ,类型不一样
         alert(age === $age); //true ,类型一样,值一样
    </script>
</body>
</html>

类型转换

在某些运算被执行时,系统内部自动将数据类型进行转换,这种转换成为 隐式转换。

  • 字符串 <-> 数字:
    • +号两边只要有一个是字符串,都会把另外一个转成字符串。
    • 除了+外的算术运算符,比如:- * / 都会把字符串转为数字类型。
    • 通过parseInt(…)函数,可以将一个字符串转为数字。
  • 其他类型 -> 布尔类型:
    • Number:0 和 NaN为false,其他均转为true。
    • String:空字符串为false,其他均转为true。
    • Null 和 undefined :均转为false。

字符串<–>数字

//类型转换 - 字符串 <-> 数字
alert(typeof ('10' - 1)); //number
alert(typeof ('10' + 1)); //string

alert(parseInt("12")); //12
alert(parseInt("12A45")); //12
alert(parseInt("A45"));//NaN (not a number)

其他类型<–>布尔类型

在js中,还有非常重要的一点是:0,null,undefined,“”,NaN 理解成false,反之理解成true。

// 类型转换 - 其他类型转为boolean
if(0){//false
    alert("0 转换为false");
}
if(NaN){//false
    alert("NaN 转换为false");
}
if(1){//true
    alert("除0和NaN其他数字都转为 true");
}

if(""){//false
    alert("空字符串为 false, 其他都是true");
}

if(" "){//true
    alert("空格字符串为 true");
}

if(null){//false
    alert("null 转化为false");
}
if(undefined){//false
    alert("undefined 转化为false");
}

**需要注意的是:**在JS中,0,null,undefined,“”,NaN理解成false,反之都为 true。

流程控制语句

在JS中,当然也存在对应的流程控制语句。常见的流程控制语句如下:

  • if … else if … else …
  • switch
  • for
  • while
  • do … while

参考:https://www.w3school.com.cn/js/index.asp

<script>
    /* if语句
     */
    if(1){
      alert("你说的对");
    };
    
    let greetings;//提前定义了一个问候变量
    let time=new Date().getHours();//获取当前的系统时间,小时
    if(time<=9){
      greetings="早安";
    }else if(time<=20){
      greetings="午安";
    }else{
      greetings="晚安";
    }
    console.log(greetings)
    
     /* 
      switch,
      需求:判断今天是星期几
    */
    let day;//定义一个变量,用来最终承载星期几
    let today=new Date().getDay();//获取当前系统时间的的天
    switch (today) {
      case 0:
        day="星期天";
        break;
      case 1:
        day = "星期一";
        break;
      case 2:
        day = "星期二";
        break;
      case 3:
        day = "星期三";
        break;
      case 4:
        day = "星期四";
        break;
      case 5:
        day = "星期五";
        break; 
      default:
        day="星期六"; 
    }
    console.log(day)
    
     /* 
      了解数组
    */
    //先定义一个数组变量
    let cars=['宝马','法拉利','保时捷','比亚迪','保时米','蔚来'];
    //alert(cars.length);
    /* 数组变量中是有下标(角标)(也叫元素对应的位置编号,但是该编号从0开始)
      想得到其中一个元素的值,采用的格式:变量名称[下标]=cars[0]=宝马
    */
  // alert(cars[0]+""+cars[5])
  /* for循环遍历 
      需求:我们想获取到数组中的每一个元素,然后保存到一个字符串类型的变量中,进行拼接展示
      输出结果:let text="宝马+法拉利+..."
    */
    //1.先定义一个变量
    let text="";
    /* 2.遍历数组 
    第一种方式
      for(表达式1;表达式2;表达式3){ 代码块}
      表达式1表示,定义初始值,let index=0,遍历从第0个开始
      表达式2 表示,遍历的结束条件  
      表达式3 表示:初始值递增,当执行完表达式1和表达式2条件都满足之后,一定执行代码块,然后执行第二次之前,对初始值进行递增
    */
   /*  for (let index = 0; index < cars.length; index++) {
        text+=cars[index]+" ";
    } */
    /* 
    第二种方式
      for in 遍历方式
       for (let index in cars) cars表示数组变量名称
       in是关键字
       let index 表示定义的数组下标
    */
    /* for (let index in cars) {
      text+=cars[index]+" ";
    } */
   /* 
      第三种方式
      foreach 遍历方式
   */
    cars.forEach(car => {
        text+=car+" "
    });

    console.log(text);
    
    
       /* 
      while循环遍历
   */
    let i=30;
    while (i<30) {
      i++;
      console.log("开始死循环了")
    }
    /* dowhile循环遍历 */
    let num=30;
    do{
      console.log("开始执行dowhile循环")
      num++;
    }
    while(num<30);

  </script>

函数

在JAVA中我们为了提高代码的复用性,可以使用方法 。同样,在JavaScript中可以使用函数来完成相同的事情。JavaScript中的函数被设计为执行特定任务的代码块,方便程序的封装复用。在JS中,需要通过关键字function来定义。接下来我们学习一下JavaScript中定义函数的2种语法:

格式一:

function 函数名(参数1,参数2..){
    要执行的代码
}

因为JavaScript是弱数据类型的语言,所以有如下几点需要注意:

  • 形参不需要声明类型,并且JS中不管什么类型都是let去声明,加上也没有意义。
  • 返回值也不需要声明类型,直接return即可

示例:

function add(a, b){
    return a + b;
}

如果要调用上述的函数add,可以使用:函数名称(实际参数列表)

let result = add(10, 20);
alert(result);

我们在调用add函数时,再添加2个参数,修改代码如下:

var result = add(10, 20, 30, 40);
alert(result);

浏览器打开,发现没有错误,并且依然弹出30,这是为什么呢?

因为在JavaScript中,函数的调用只需要名称正确即可,参数列表不管的。如上述案例,10传递给了变量a,20传递给了变量b,而30和40没有变量接受,但是不影响函数的正常调用。

注意:由于JS是弱类型语言,形参、返回值都不需要指定类型。在调用函数时,实参个数与形参个数可以不一致,但是建议一致。

格式二

刚才我们定义函数,是为函数指定了一个名字。 那我们也可以不为函数指定名字,那这一类的函数,我们称之为匿名函数。那接下来,方式二,就来介绍一下匿名函数的定义和调用。

**匿名函数:**是指一种没有名称的函数,由于它们没有名称,因此无法直接通过函数名来调用,而是通过变量或表达式来调用。

匿名函数定义可以通过两种方式:函数表达式 和 箭头函数。

函数表达式:

var add = function (a, b){
    return a + b;
}

箭头函数:

var add = (a,b) => {
    return a + b;
}

上述匿名函数声明好了之后,是将这个函数赋值给了add变量。 那我们就可以直接通过add函数直接调用,调用代码如下:

let result = add (10, 20);
alert(result);

也可以在定义完匿名函数之后,让该函数立即执行,这类函数我们也称为 立即执行函数

(function (a,b) {consle.log(a + b);}) (10, 20);

((a,b) => {console.log(a + b);})(100, 200);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值