JavaScript

1 历史与发展

  • 1995 年,网景(Netscape)公司推出了 LiveScript,后改名为 JavaScript,简称 JS
  • 1996 年,IE 中也开始出现了 JScript
  • 1997 年,制定了 JS 的标准规范 ECMAScript
  • ECMAScript 这个规范一直在发展,每一年都会出新的标准规范,目前是 ES6
  • 2009 年,JS 开始向后端发展,出现了 Node.js

2 JS作用

  • 用于给页面添加动态交互效果
  • 注意:JS 与 Java 是两种完全不同的编程语言

3 JS语言特点

  • 动态类型:JS 是一种弱类型语言,不需要指定变量类型,变量的类型在运行时会根据值自动推断
  • 解释性:JS 是一种解释型语言,不需要编译就可以直接在浏览器中运行
  • 基于对象:JS 是一种基于对象的语言,它不仅可以创建对象,也能使用现有的对象
  • 包含的内容有:变量、数据类型、运算符、各种语句、方法、面向对象…

4 页面中引入JS代码的三种方式:

  1. 内联(行内)写法:
  • 位置:写在对应的 HTML 元素上
  • 作用:可以给元素添加 JS 事件代码,触发事件执行对应效果
  • 事件:指系统提供的一系列状态
    • onclick 点击事件,点击此元素时才会触发
    • alert(666) 弹出警告框
<button onclick="alert('请先登录!')">点击即玩</button>
  1. 内部写法:
  • 位置:在页面任意位置添加 script 标签,在 script 标签中添加 JS 代码
  • 建议写在 body 结束标签之前!
<script>
    //将内容输出到浏览器控制台
    console.log("Hello World!");
    console.log(d1);
</script>
  1. 外部写法:
  • 位置:写在单独的 js 文件中,在 head 标签中添加 script 标签引入外部的 js 文件
  • 注意:若此 script 标签用于引入外部的 JS 文件,则标签中不能写 JS 代码,不会执行
<script src="01.js">
    console.log("Hello World!666");//不会执行!
</script>

5 变量与常量

  • JS 语言是弱类型语言,声明变量不需要指定类型
  • 在 JS 中,使用 let 或 var 声明变量
    • let 声明的变量,作用域类似Java 语言中的局部变量, 块级作用域【推荐使用】
    • var 声明的变量,全局作用域,var声明的变量还可以重复声明
  • 在 JS 中,使用 const 声明常量,常量的值不允许被修改!
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>02变量与常量</title>
</head>
<body>
    <script>
        //JS是一门弱类型语言,不需要指定变量的数据类型
        //1.声明变量
        var a = 10;
        var b = 3.14;
        var c = '你们';
        var d = "好呀";//单引双引都可以
        var e = true;
        console.log(a,b,c,d,e);//可以一次性输出多个值,用逗号隔开
        //根据存的值来推断变量的类型 typeof
        console.log(typeof a,typeof b,typeof c,typeof d,typeof e);

        //js变量可以使用不同的类型
        a = 3.4;
        console.log(a,typeof a);//3.4 number
        a = false;
        console.log(a,typeof a);//boolean false
        //用var声明的变量可以重复声明
        var a = '哈哈哈我又来啦';
        console.log(a,typeof a);//哈哈哈我又来啦 string

        let x = 1;
        console.log(x,typeof x);
        x = 6.6;
        console.log(x,typeof x);
        //let x = false;//报错:x已经被声明过了
        //console.log(x,typeof x);

        const y = 1;
        console.log(y,typeof y);
        //y = 33;//常量的值不允许被修改
    </script>
</body>
</html>

6 JS常用数据类型

原始数据类型

  • 字符串(string):没有字符的概念,使用单引号或双引号包裹均可
  • 数字(number):包含整数与小数类型
  • 布尔(boolean):值只有 true 与 false
  • 未定义(undefined):Java 声明变量必须声明类型,但 JS 是弱类型语言,若声明变量未赋值就不清楚数据类型
  • 空(null):结合后面的引用类型使用

引用类型

  • 对象(Object)
  • 数组(Array)
  • 函数(Function)

查看变量类型的方式:typeof 变量名

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>数据类型</title>
</head>
<body>
    <script>
        //JS的数据类型分为原始类型+引用类型
        //原始类型:number string boolean undefined null
        var a =1;
        let b = 9.9;
        console.log(typeof a, typeof b);//整数+小数->number数值类型

        let c = '下午好!';
        let d = '今天下雨了';
        console.log(typeof c, typeof d);//单引+双引->string字符串类型

        let e = true;
        let f = false;
        console.log(typeof e, typeof f);//boolean布尔类型

        //声明了变量,但未赋值
        //访问对象不存在的属性,访问数组不存在的下标
        let g;
        console.log(g, typeof g);//undefined 'undefined' 未定义型

        //引用类型:Object Array String Boolean Function Number...
        //1)定义JS对象
        //let obj = {};  ===> new obj();
        let obj = {
            //属性名:属性值 多对值间使用逗号隔开
            name : '张三',
            age : 18
        };
        console.log(obj);
        console.log(obj.age,obj.name);
        //如果属性存在,修改属性的值
        obj.age = 19;
        console.log(obj.age);
        //如果属性不存在,新增一个属性
        obj.like = '吃冰棍';
        console.log(obj);
        console.log(obj.like);
        console.log(obj.eat);//访问对象不存在的属性undefined

        //JS数组
        let arr = ['李逵','鲁班','后羿',1,3.3,false];
        console.log(arr);//打印数组名可以直接查看数组中的数据
        console.log(arr[0]);//'李逵'
        console.log(arr[5]);//false
        console.log(arr[99]);//访问数组不存在的下标 undefined
    </script>
</body>
</html>

7 运算符

7.1 算术运算符:+ - * / %

  • 除法会自动根据结果转换为整数或小数
  • Java:
int x = 5; int y = 2; 
int z = x/y 
z=2
  • JS:
let x = 5; let y = 2; 
let z = x/y; 
z=2.5 自动变为小数
若x变为6:z=3 自动变为整数

7.2 关系运算符:> < >= <= != =====

  • ==:松散比较运算符:只比较等号左右两边的值,如:“666”==666 结果为 true
  • ===:严格比较运算符:先比较类型,类型相同后再比较值,如:“666”===666 结果为 false

7.3 逻辑运算符:&&、||、!

7.4 赋值运算符:= += -= *= /= %=

7.5 三目运算符:条件?值 1:值 2

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>JS运算符</title>
</head>
<body>
<script>
    //如果比较运算符左右两边有数字,会转为数字再进行比较
    console.log(3>10);
    console.log('3'>10);
    console.log(3>'10');
    //如果比较运算符左右两边都是字符串,会比较它们的编码值
    console.log('3'>'10');//51>49=>true
    /* '3'.charCodeAt()查看字符的编码值 */
    console.log('3'.charCodeAt());//51
    console.log('10'.charCodeAt());//49
    //console.log('超'>'博');

    //除法会按照实际结果显示结果
    console.log(6/2);//3
    console.log(3/2);//1.5

    let a = 1;
    let b = true;
    //松散比较运算符,只比较值,Number(true)=1
    console.log(a == b);//true
    //严格比较运算符,先比较类型,再比较值 number ≠ boolean
    console.log(a === b);//false

    //Number() 将参数转为数字,如果得不到数字结果,就是NaN(Not a Number)
    //Boolean()
    //以下五个特殊值转为布尔都是false
    console.log(Boolean(false));
    console.log(Boolean(0));
    console.log(Boolean(''));
    console.log(Boolean(undefined));
    console.log(Boolean(null));

    //三元运算符 1
    let c = 0;
    console.log(c==0 ? 'YES' : 'NO');//'YES'
    //=是赋值符号,给c赋值为0,Boolean(0)=false,所以取3号位置的值'NO'
    console.log(c=0 ? 'YES' : 'NO');//'NO'
</script>
</body>
</html>

8 流程控制

  • 分支语句:(与 Java 一致)
    • if 单分支结构
    • if-else 双分支结构
    • if-else-if 嵌套分支
    • switch-case 选择分支
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>05流程控制</title>
</head>
<body>
<script>
    //1.顺序结构
    console.log(1);
    console.log(2);
    console.log(3);
    console.log(4);
    //2.分支结构
    if('3'<'10'){
        console.log('比较的是数值3<10')
    }else{
        console.log('比较的是编码51<49')
    }
    //3.选择分支
    let gender = 666;
    switch (gender){
        case 1:
            console.log('先生');break;
        case 0:
            console.log('女士');break;
        default:
            console.log('未知');
    }
</script>
</body>
</html>
  • for 循环语句
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>流程控制</title>
</head>
<body>
  <script>
//4.循环结构
let names = ['张三','李四','王五','赵六','钱七'];
for (let i = 0; i < names.length ;i++){
    console.log(names[i]);
}
//如果是用var声明的循环变量i,此处可以打印,是全局变量
//如果是用let声明的循环变量i,此处无法使用,是局部变量
//console.log(i)
//增强for循环 names是要遍历的集合/数组
//let n 表示每轮循环取出的内容,也就是本轮循环遍历到的元素
for (let n of names){
    console.log(n)
}
  </script>
</body>
</html>

帮大家回忆下Java的写法:

import java.util.ArrayList;

public class TestDemo {
    public static void main(String[] args) {
        ArrayList<Person> persons = new ArrayList<>();
        Person p1 = new Person("张三",3);
        Person p2 = new Person("李四",4);
        Person p3 = new Person("王五",5);
        persons.add(p1);
        persons.add(p2);
        persons.add(p3);
        //增强for循环
        for(Person p : persons){
            p.eat(p.name,p.age);
        }
    }
}
class Person {
    String name;
    int age;
    void eat(String name,int age){
        System.out.println(name+"练了"+age+"年Java");
    }
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

所以后面的JS循环结构也可以写成这样:

<script>
var person1 ={
    name: "张三",
    say: function(name){
        console.log(name+'你好');
    }
};
var person2 ={
    name: "李四",
    say: function(name){
        console.log(name+'你好');
    }
};
var person3 ={
    name: "王五",
    say: function(name){
        console.log(name+'你好');
    }
};
var persons = [person1,person2,person3];
for(let p of persons){
    console.log(p.name)
    p.say(p.name);
}
</script>

9 方法

Java 语言的方法和 JavaScript 的方法对比

  • Java: public 返回值类型 方法名(参数列表){方法体}
  • JavaScript: function 方法名(参数列表){方法体}

四种定义方法的方式:

  • function 方法名(参数列表){方法体}
  • let 方法名 = function(参数列表){方法体}
  • const 方法名 = (参数列表)=>{方法体}
  • let 方法名 = new Function(“参数 1”,“参数 2”,… ,“字符串方法体”);
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>06函数</title>
</head>
<body>
<script>
    //1.JS通过function关键字来定义函数
    function f1(){
        console.log('今天星期五~');
    }
    f1();//调用函数
    f1();
    f1();
    function f2(n){//函数形参不需要写类型,指定一个形参名即可
        console.log('今天星期五~'+n);
    }
    f2(333);
    f2(334);
    f2(335);

    function f3(a,b){
        console.log(a+b);
    }
    f3(1,2);
    //形参个数>实参个数,未被赋值的形参值为undefined
    f3(1);//1+undefined=NaN(Not a Number)
    //形参个数<实参个数,多余的实参会被忽略
    f3(2,2,3);//2+2=4

    //arguments用来保存调用函数时传入的实参,可以看到实参的个数和值
    function f4(){
        console.log(arguments);
    }
    f4(50);//Arguments[50, ...]
    f4(50,60);//Arguments(2)[50,60, ...]
    f4(50,60,70);//Arguments(3)[50,60,70, ...]

    //使用return关键字返回方法的结果
    function f5(a,b){
        return a+b;
    }
    console.log(f5(1,2));//直接打印return的结果
    let res = f5(2,2);//将打印结果保存在res变量里并打印
    console.log(res);

    //第二种声明方式
    let f6 = function(){
        console.log('第二种')
    }
    f6();
    console.log(typeof f6);//function
    console.log(f6);//ƒ (){console.log('第二种')}

    //第三种:箭头函数
    const f7 = (n)=>{
        console.log('第三种箭头函数'+n);
    }
    f7(666);

    //第四种
    //new Function(参数1,参数2,...,方法体)
    //最后一个参数是字符串类型的方法体
    let f8 = new Function('name','age',"console.log('方法体'+name);return age;");
    console.log(f8('小明',18));
</script>


</body>
</html>

10 JavaScript组成

在这里插入图片描述

DOM 与 BOM 的关系:
DOM 的核心对象document 是 BOM中window对象的子对象

11 DOM操作

DOM(Document Object Model)文档对象模型, 包含 W3C 规定的页面相关接口
DOM 把页面规划成节点层级构成的文档,当浏览器加载一个 WEB 页面时,就会创建这个页面的模型,称为 DOM 树。

这些接口可以操作网页的结构、内容与样式:
创建元素对象

  • let d = document.createElement(“div”);

将新元素到某个元素对象里

  • 元素对象.append(新元素);

修改元素的属性值

  • imgE.src = “money.jpg”;

通过 id 获取页面中的元素对象

  • let 元素对象 = document.getElementById(‘d2’);
  • h5 中也可以直接使用 id 值代表元素 console.log(id 值);

通过选择器获取页面中的元素对象

  • let 元素对象 = document.querySelector(“选择器”);

获取和修改控件的值

  • 元素对象.value 获取
  • 元素对象.value=“xxx” 修改

获取和修改元素的文本内容 例:<div>文本内容</div>

  • 元素对象.innerHTML获取
  • 元素对象.innerHTML = “xxx” 修改

12 BOM操作

BOM(Browser Object Model)浏览器对象模型,是 JavaScript 与浏览器之间进行交互的接口
BOM 提供了一组对象,这些对象代表着浏览器相关内容,并提供了访问和控制这些对象的方法
以下是一些常见的 BOM 对象:

  • window
  • location
  • history

window 对象
window 对象是 JavaScript 中表示当前浏览器窗口的内置全局对象
它包含了浏览器窗口的所有属性和方法,可以通过该对象来访问和控制当前窗口的各种行为

  • isNaN(变量) 判断变量是否是 NaN
  • parseInt() 将字符串或小数转成整数
  • parseFloat() 将字符串转成小数
  • alert(“xxx”) 弹出提示框
  • confirm(“xxx”) 弹出确认框
  • prompt(“xxx”) 弹出提示输入框

location 对象

  • location.href 获取或修改浏览器的请求地址
  • location.reload() 刷新页面
  • location.search 获取查询字符串参数

history 对象

  • history.length 历史页面的数量
  • history.back() 返回上一页面 后退
  • hisotry.forward() 前往下一页面 前进
  • history.go(n) 正值代表前进n个页面 负值代表后退n个页面
    • history.go(0) 表示刷新页面
    • history.go(-1) 表示回退一个页面,注意如果是第一个页面,无法回退
    • history.go(2) 表示前进两个页面,注意如果是最后一个页面,无法前进
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值