JavaScript 基础

1. 简介

2. 快速入门

2.1 引入

  • 内部标签

    <script>
        alert('hello, world!');
    </script>
    
  • 外部引入

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

2.2 数据类型

  • number

    整数:123
    浮点数:123.1
    科学计数法:1.123e3
    负数:-123
    非数字:NaN
    无限大:Infinity
    
  • 字符串:'abc'"abc"

  • 布尔值:truefalse

  • 逻辑运算:&&||!

  • 比较运算符

    赋值:=
    等于:== (值一样为true)
    绝对等于:=== (类型和值都一样为true
  • 空:null

  • 未定义:undefined

  • 数组

    var arr = [1,2,'hello',null];
    new Array(1,2,'hello',null);
    
  • 对象

    var person = {
        name: "弗罗多",
        age: 50,
        like: ['smoke','drink']
    }
    

2.3 语法

严格检查模式:'use strict';,必须在script代码的第一行。

(1) 定义变量

var score = 60;
let score = 60; // ES6

(2) 条件判断

if (score > 60) {
	...
} else if (score > 80) {
 	...
} else {
	...
}

(3) 控制台输出

console.log('及格');

(4) 弹窗

alert('不及格');

3. 数据类型

3.1 字符串

  • 正常字符串使用 '' 或者 "" 包裹

    let student = 'frodo';
    let level = "不及格";
    
  • 转义字符串使用 "\####"

    let str = "\u4e2d"; // 中
    
  • 多行字符串

    let msg = `
    Time
    
    Time is the currency of your life, spend it wisely
    时间就像是生命的金钱,要学会合理支配
    Don’t let others no matter how well intentioned spend it for you, it’s all you’ve got
    不要让别人为你浪费时间,你该自己去处理你应做的
    In the end, you may falter, but rest assured, time will not
    你最后也许会动摇,但时间不会
    ...
    `;
    
  • 模板字符串

    let msg = `成绩${level}`;
    
  • 字符串长度

    let strLength = student.length;
    
  • 大小写转换

    let strUp = student.toUpperCase();
    let strLow = student.toLowerCase();
    
  • 下标索引

    let dLocal = student.indexOf('d');
    
  • 截取字符串

    let subStr = student.substring(1);	// 1到最后
    let subStr = student.substring(1,4);	// 1到4
    

3.2 数组

  • 数组定义

    let arr = [1,2,3,'frodo'];
    
  • 长度

    let arrLength = arr.length;	// 4
    
  • 下标索引

    let frodoIndex = arr.indexOf('frodo');	// 3
    
  • 数组截取

    let subArr = arr.slice(2);	// [3, 'frodo']
    
  • 尾部添加元素

    /*
     * pushArr = 6
     * arr = [1, 2, 3, 'frodo', 'a', 'b']
     */
    let pushArr = arr.push('a',"b");
    
  • 尾部弹出元素

    /*
     * popArr = 'b'
     * arr = [1, 2, 3, 'frodo', 'a']
     */
    let popArr = arr.pop();
    
  • 头部添加元素

    /*
     * unshArr = 7
     * arr = ['c', 'd', 1, 2, 3, 'frodo', 'a']
     */
    let unshArr = arr.unshift('c','d');
    
  • 头部弹出元素

    /*
     * shArr = 'c'
     * arr = ['d', 1, 2, 3, 'frodo', 'a']
     */
    let shArr = arr.shift();
    
  • 排序

    // arr = ['d', 1, 2, 3, 'frodo', 'a']
    let sortArr = arr.sort();	
    /*
     * arr = [1, 2, 3, 'a', 'd', 'frodo']
     * sortArr = [1, 2, 3, 'a', 'd', 'frodo']
     */
    
  • 元素反转

    // arr = [1, 2, 3, 'a', 'd', 'frodo']
    let reArr = arr.reverse();
    /*
     * arr = ['frodo', 'd', 'a', 3, 2, 1]
     * reArr = ['frodo', 'd', 'a', 3, 2, 1]
     */
    
  • 拼接

    /*
     * arr = ['frodo', 'd', 'a', 3, 2, 1]
     * conArr = ['frodo', 'd', 'a', 3, 2, 1, 'A', 'B']
     */
    let conArr = arr.concat("A","B");
    
  • 连接符

    /*
     * arr = ['frodo', 'd', 'a', 3, 2, 1]
     * joArr = 'frodo-d-a-3-2-1'
     */
    let joArr = arr.join("-");
    
  • 多维数组

    /*
     * (3) [Array(2), Array(2), Array(2)]
     * 0: (2) [1, 2]
     * 1: (2) ['a', 'b']
     * 2: (2) ['壹', '贰']
     * length: 3
     */
    let mulArr = [[1,2],['a','b'],["壹","贰"]];
    

3.3 对象

  • 对象定义

    // person = {name: 'frodo', age: 50, sex: '男', like: 'drink', race: 'Hobbit'}
    let person = {
        name:"frodo",
        age:50,
        like:"drink",
        race: 'Hobbit'
    }
    
  • 对象属性赋值

    // person = {name: 'frodo', age: 50, sex: '男', like: 'smoke', race: 'Hobbit'}
    person.like="smoke";
    
  • 删除对象属性

    /*
     * delper = true
     * person = {name: 'frodo', age: 50, sex: '男', race: 'Hobbit'}
     */
    let delper = delete person.like;
    
  • 添加对象属性

    // person = {name: 'frodo', age: 50, sex: '男', race: 'Hobbit', height: 168}
    person.height = 168;
    
  • 判断属性是否包含在此对象及父对象内

    let ageInPer = 'age' in person;			// true
    let strInPer = 'toString' in person;	// true
    
  • 判断实行是否包含在此对象内

    let perHasSex = person.hasOwnProperty('sex');		// true
    let perHasStr = person.hasOwnProperty('toString');	// false
    

4. 流程控制

4.1 条件判断

if (score > 60) {
	...
} else if (score > 80) {
 	...
} else {
	...
}

4.2 循环

(1) while

while(...) {
	...
}

(2) do while

do{
    ...
} while (...)

(3) for

for (let i = 0; i < 10 ; i++) {
    ...
}
/*
 * array 为数组 value 为元素值
 */
arr.forEach(function (value) {
    ...
});
/*
 * array 为数组 key 为下标
 * array 为对象 key 为关键字
 */
for (const key in array) {
    ...
}
/*
 * arr 为数组 element 为数组元素
 * arr 为 Map,element 为键值对
 * arr 为 set,element 为元素值
 */
for (const element of arr) {
    ...
}

5. Map 和 Set

  • Map

    // score = {'tom' => 100, 'jerry' => 80}
    let score = new Map([['tom',100],['jerry',80]]);
    // tomScore = 100
    let tomScore = score.get('tom');
    // score = addSpikeScore = {'tom' => 100, 'jerry' => 80, 'spike' => 90}
    let addSpikeScore = score.set('spike', 90);	
    /*
     * delSpikeScore = true
     * score = {'tom' => 100, 'jerry' => 80}
     */
    let delSpikeScore = score.delete('spike');
    
  • Set:无须不重复的集合

    // set = {0, 1, 2, 3}
    let set = new Set([0,1,2,3,2,1,0]);
    // set = add = {0, 1, 2, 3, 9}
    let add = set.add(9);
    /*
     * del = true
     * set = {0, 1, 2, 3}
     */
    let del = set.delete(9);
    // has = true
    let has = set.has(3);
    

6. 函数

6.1 函数定义

  • 方式一

    function abs(x) {
        if (x>=0) return x;
        else return -x;
    }
    
  • 方式二

    let abs = function (x) {
        if (x>=0) return x;
        else return -x;
    }
    

6.2 手动抛出异常

function abs(x) {
    if (typeof x !== 'number') throw 'Not a number';
    if (x>=0) return x;
    else return -x;
}

6.3 可变参数

javascript 的函数调用没有参数限制,超出函数定义的参数将会被隐藏,使用 arguments 关键字可以获取到所有的参数。

function abs(x) {
    if (typeof x !== 'number') throw 'Not a number';
    for (let i = 0; i < arguments.length; i++) {
        console.log(arguments[i]);
    }
    if (x>=0) return x;
    else return -x;
}

或者可以为函数定义 ...rest 参数获取定义外的参数。

function abs(x,...rest) {
    if (typeof x !== 'number') throw 'Not a number';
    console.log(rest);
    if (x>=0) return x;
    else return -x;
}

6.4 方法

方法就是对象内的函数

let person = {
    name: 'jack',
    birth: 2000,
    age: function () {
        let year = new Date().getFullYear();
        return year-this.birth;
    }
};

this 默认指向当前对象

apply 可更改 this 的指向,使此对象调用另一个对象的方法或属性。

let person = {
    age:function () {
        let year = new Date().getFullYear();
        return year - this.birth;
    }
};
let jack = {
    name: 'jack',
    birth: 2000,
    age: function () {
        let year = new Date().getFullYear();
        return year-this.birth;
    }
};
let apply = person.age.apply(jack);	// 21
let age = person.age();	// NaN

7. 变量

作用域

  • 函数内变量在函数外无效
  • 内部函数可调用外部函数变量
  • 若有同名变量采用就近原则
  • 若调用全局都没有的变量,则会报错
  • js 默认将所有变量的声明提升为全局,因此规范中将所有变量定义为全局变量来保证安全性。

全局变量

定义在函数外的变量即是全局变量,所有的全局变量都会绑定到 window 对象上,因此会有变量冲突问题,规范中通过定义唯一全局变量来解决。

// 唯一全局变量
var app = {};
app.attribute = '属性';
app.function = function (a, ...rest) {
    ...
}

局部变量

同一函数内的代码块中使用 var 定义的变量在代码块外依然有效,js 使用 let 解决局部作用域冲突问题

// vF(12) = '正数'
function vF(a) {
    if (a > 0) {
        var vOut = '正数';
    } else {
        vOut = '负数';
    }
    return vOut;
}
// 报错,ReferenceError: lOut is not defined
function lF(a) {
    if (a > 0) {
        let lOut = '正数';
    } else {
        lOut = '负数';
    }
    return lOut;
}

常量

const PI = 3.14;

8. 标准对象

8.1 Date

let dateTime = new Date();
let fullYear = dateTime.getFullYear();
let month = dateTime.getMonth();
// 日
let date = dateTime.getDate();
// 星期
let day = dateTime.getDay();
let hours = dateTime.getHours();
let minutes = dateTime.getMinutes();
let seconds = dateTime.getSeconds();
// 时间戳
let time = dateTime.getTime();
// 时间戳转换为时间
let transDate = new Date(time);
// 转换为字符串
let dateStr = transDate.toLocaleString();

8.2 JSON

JSON 是一种轻量级的数据交换格式

数组用 [],对象用 {},格式为:key:value

// JSON
let person = {
    name: "json",
    age: 0,
    sex: "男"
}
// perJson = '{"name":"json","age":0,"sex":"男"}'
let perJson = JSON.stringify(person);
// perObj = {name: 'json', age: 0, sex: '男'}
let perObj = JSON.parse(perJson);

8.3 Ajax

9. 面向对象编程

class Person {
    name = '';
    sex = '';
    age = '';
    constructor(name, sex, age) {
        this.name = name;
        this.sex = sex;
        this.age = age;
    }
    run () {
        return this.name + " is running...";
    }
}

class Student extends Person {
    like = '';
    constructor(name, sex, age, like) {
        super(name, sex, age);
        this.like = like;
    }

    run() {
        return super.run();
    }
    study() {
        return this.name + " is studying...";
    }
}

let tom = new Student("Tom","man",10,'drink');
console.log(tom);	// Student {name: 'Tom', sex: 'man', age: 10, like: 'drink'}
console.log(tom.study());	// Tom is studying...
console.log(tom.run());		// Tom is running...

10. 操作 BOM 对象

BOM(Brow Object Model)即浏览器模型。

  • window :浏览器窗口
  • screen :电脑屏幕
  • location: 当前页面信息
  • document :当前页面
  • cookie :缓存

11. 操作 DOM 对象

浏览器网页本质上是一个 DOM 树形结构,对网页的操作相当于操作树形结构的结点。

11.1 获取 DOM 结点

获取 DOM 结点即查找HTML元素

方法 描述
document.getElementById(id) 通过元素 id 来查找元素
document.getElementsByTagName(name) 通过标签名来查找元素
document.getElementsByClassName(name) 通过类名来查找元素
<div id="father">
    <h1>Dom</h1>
    <p id="p1">P1</p>
    <p class="p2">P2</p>
</div>
<script>
    'use strict';
    // 获取 DOM 结点
    let h1 = document.getElementsByTagName('h1');
    let p1 = document.getElementById('p1');
    let p2 = document.getElementsByClassName('p2');
</script>

HTML5 之前版本的 document 对象属性

属性 描述 DOM
document.anchors 返回拥有 name 属性的所有 元素。 1
document.applets 返回所有 元素(HTML5 不建议使用) 1
document.baseURI 返回文档的绝对基准 URI 3
document.body 返回 元素 1
document.cookie 返回文档的 cookie 1
document.doctype 返回文档的 doctype 3
document.documentElement 返回 元素 3
document.documentMode 返回浏览器使用的模式 3
document.documentURI 返回文档的 URI 3
document.domain 返回文档服务器的域名 1
document.domConfig 废弃。返回 DOM 配置 3
document.embeds 返回所有 元素 3
document.forms 返回所有
元素
1
document.head 返回 元素 3
document.images 返回所有 元素 1
document.implementation 返回 DOM 实现 3
document.inputEncoding 返回文档的编码(字符集) 3
document.lastModified 返回文档更新的日期和时间 3
document.links 返回拥有 href 属性的所有 元素 1
document.readyState 返回文档的(加载)状态 3
document.referrer 返回引用的 URI(链接文档) 1
document.scripts 返回所有

12. jQuery

jQuery 是一个 JavaScript 库,里面包含了大量的 js 函数。

12.1 简单使用

cdn 引入

<script src="https://code.jquery.com/jquery-3.6.0.js" integrity="sha256-H+K7U5CnXl1h5ywQfKtSj8PCmoN9aaq30gDh27Xc0jk=" crossorigin="anonymous">script>

源码下载

在这里插入图片描述

使用方法

$(selector).action()$(选择器).事件(函数体(){...})

选择器包含 css 选择器及 jQuery 自定义的选择器,详见 jQuery API 中文文档

DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>jQuerytitle>
    
    <script src="lib/jquery-3.6.0.js">script>
head>
<body>

<a ID="test_jQuery">a>
<script>
    // $(selector).action();
    $('#test_jQuery').click(function () {
        alert('Hello jQuery');
    })
script>
body>
html>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>jQuery</title>
    <!--<script src="https://code.jquery.com/jquery-3.6.0.js" integrity="sha256-H+K7U5CnXl1h5ywQfKtSj8PCmoN9aaq30gDh27Xc0jk=" crossorigin="anonymous"></script>-->
    <script src="lib/jquery-3.6.0.js"></script>
</head>
<body>

<strong>Mouse : </strong><span id="mouseMove"></span>
<div id="moveDiv" style="width: 500px; height: 500px; border: 1px solid red">
    <p>在此区域移动鼠标</p>
</div>
<script>
    'use strict';
    // 网页加载完毕后响应事件
    $(function () {
        $('#moveDiv').mousemove(function (page) {
            $('#mouseMove').text('x : ' + page.pageX + ' ; y : ' + page.pageY);
        })
    });
</script>

</body>
</html>

12.2 操作 DOM 元素

<ul id="test-ul">
    <li id="java">Java</li>
    <li class="php">PHP</li>
    <li name="python">Python</li>
</ul>
<script>
    'use strict';
    // jQuery 查找 DOM 元素
    let java = $('#java').text();
    let php = $('#test-ul li[class=php]').text();
    let python = $('#test-ul li[name=python]').text();

    // jQuery 操作 DOM 元素
    $('#java').text('JAVA');
    $('#java').html('Strong JAVA');
    $('#java').css("color","red");
    $('#test-ul li[class=php]').css({"color":"red", "background":"blue"});
</script>

你可能感兴趣的:(前端,网络,jquery)