JavaScript

 

本 JavaScript 笔记全程基于 ES6(ECMAScript 2015)标准编写,涵盖 let/const 变量声明、箭头函数、模块化、Promise、class 类等核心特性,所有示例与知识点均遵循 ES6 语法规范,贴合现代前端开发主流实践。

MDN官方文档:https://developer.mozilla.org/zh-CN/

使用方式:HTML页面中的任意位置加上标签即可。(加上type=”module”不会影响其他script标签)

  • 直接在标签内写JS代码。
  • 直接引入文件:
  • 将所需的代码通过import关键字引入到当前作用域。

let与const:let用来定义变量;const用来定义常量

运算符与C++、Python、Java类似,不同点:**表示乘方,等于与不等于用===和!==(三个等号不仅判断值相等还判断类型相等)

函数

函数是用对象来实现的。函数也C++中的函数类似。

function add(a, b) {  // 如果未定义返回值,则返回undefined。
    return a + b;
}

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

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

与C++中的Class类似。但是不存在私有成员。this:指向类的实例。

class Point {
    constructor(x, y) {  // 构造函数
        this.x = x;  // 成员变量
        this.y = y;

        this.init();
    }

    init() {
        this.sum = this.x + this.y;  // 成员变量可以在任意的成员函数中定义
    }

    toString() {  // 成员函数
        return '(' + this.x + ', ' + this.y + ')';
    }
}

let p = new Point(3, 4);
console.log(p.toString());
class ColorPoint extends Point {  // 继承
    constructor(x, y, color) {
        super(x, y); // 这里的super表示父类的构造函数
        this.color = color;
    }

    toString() {
        return this.color + ' ' + super.toString(); // 调用父类的toString()
    }
}

注意:

  • super这个关键字,既可以当作函数使用,也可以当作对象使用。
    • 作为函数调用时,代表父类的构造函数,且只能用在子类的构造函数之中。
    • super作为对象时,指向父类的原型对象。
  • 在子类的构造函数中,只有调用super之后,才可以使用this关键字。
  • 成员重名时,子类的成员会覆盖父类的成员。类似于C++中的多态。

事件

JavaScript的代码一般通过事件触发。可以通过addEventListener函数为元素绑定事件的触发函数。

常见的触发函数有:

鼠标

  • click:鼠标左键点击
  • dblclick:鼠标左键双击
  • contextmenu:鼠标右键点击
  • mousedown:鼠标按下,包括左键、滚轮、右键
  • event.button:0表示左键,1表示中键,2表示右键
  • mouseup:鼠标弹起,包括左键、滚轮、右键
  • event.button:0表示左键,1表示中键,2表示右键

键盘

  • keydown:某个键是否被按住,事件会连续触发
  • event.code:返回按的是哪个键
  • event.altKey、event.ctrlKey、event.shiftKey分别表示是否同时按下了alt、ctrl、shift键。
  • keyup:某个按键是否被释放
  • event常用属性同上
  • keypress:紧跟在keydown事件后触发,只有按下字符键时触发。适用于判定用户输入的字符。
  • event常用属性同上
  • keydown、keyup、keypress的关系类似于鼠标的mousedown、mouseup、click

表单

  • focus:聚焦某个元素
  • blur:取消聚焦某个元素
  • change:某个元素的内容发生了改变

窗口(需要作用到window元素上)

  • resize:当窗口大小放生变化
  • scroll:滚动指定的元素
  • load:当元素被加载完成

JavaScript常用库

jQuery

使用方式

  • 在<head>元素中添加以下任意一种:
    <script src="https://cdn.acwing.com/static/jquery/js/jquery-3.3.1.min.js"></script>
    <script src="https://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
    
  • 按jQuery官网提示下载:https://jquery.com/download/

选择器(类似于CSS选择器)

$('div');
$('#kof');  // id
$('.big-div');  // class
$('div > p');

事件

$('div').on('click', function (e) {  // $(selector).on(event, func)绑定事件
    console.log("click div");
});

$('div').on('click', function (e) {  // $(selector).off(event, func)删除事件
    console.log("click div");

    $('div').off('click');
});

$('div').on('click.first', function (e) {  // 当存在多个相同类型的事件触发函数时,可以通过click.name来区分
    console.log("click div");

    $('div').off('click.first');
});

元素的隐藏、展现、添加、删除

$A.hide();   // 隐藏,可以添加参数,表示消失时间
$A.show();  // 展现,可以添加参数,表示出现时间
$('<div class="mydiv"><span>Hello World</span></div>');  // 构造一个jQuery对象
$A.append($B);  // 将$B添加到$A的末尾
$A.remove();   // 删除元素$A

对类的操作

$A.addClass(class_name);  // 添加某个类
$A.removeClass(class_name);  // 删除某个类
$A.hasClass(class_name);  // 判断某个类是否存在

ajax

$.ajax({  // GET方法
    url: url,
    type: "GET",
    data: {  // 输入
    },
    dataType: "json",
    success: function (resp) {  // resp为后端返回的json字典

    },
});

requestAnimationFrame(func)

该函数会在下次浏览器刷新页面之前执行一次,通常会用递归写法使其每秒执行60次func函数。调用时会传入一个参数,表示函数执行的时间戳,单位为毫秒。

例如:

let step = (timestamp) => {  // 每帧将div的宽度增加1像素
    let div = document.querySelector('div');
    div.style.width = div.clientWidth + 1 + 'px';
    requestAnimationFrame(step);
};

requestAnimationFrame(step);

JSON

JSON对象用于序列化对象、数组、数值、字符串、布尔值和null。

常用API:

JSON.parse();  // 将字符串解析成对象
JSON.stringify();  // 将对象转化为字符串

canvas

<canvas>是一个可以使用脚本 (通常为JavaScript) 来绘制图形的 HTML 元素。为了在 Canvas 上绘制图形,我们使用一个 JavaScript 上下文对象,它能动态创建图像。例如:

this.$canvas = $('<canvas width="1280" height="700" tabindex=0></canvas>');
this.ctx = this.$canvas[0].getContext('2d');

websocket

与服务器建立全双工连接。常用API:

new WebSocket('ws://localhost:8080');建立ws连接
send()向服务器端发送一个字符串一般用JSON将传入的对象序列化为字符串
onopen类似于onclick当连接建立时触发
onmessage当从服务器端接收到消息时触发
close()关闭连接
onclose当连接关闭后触发

window

window.open("https://www.acwing.com")在新标签栏中打开页面
location.reload()刷新页面
location.href = "https://www.acwing.com"在当前标签栏中打开页面

localStorage

可以在用户的浏览器上存储键值对。常用API:

setItem(key, value)插入
getItem(key)查找
removeItem(key)删除
clear()清空

Map

Map 对象保存键值对。用for…of或者forEach可以按插入顺序遍历。键值可以为任意值,包括函数、对象或任意基本类型。常用API:

set(key, value)插入键值对如果key已存在则会覆盖原有的value
get(key)查找关键字如果不存在返回undefined
size返回键值对数量
has(key)返回是否包含关键字key
delete(key)删除关键字key
clear()删除所有元素

Set

Set 对象允许你存储任何类型的唯一值,无论是原始值或者是对象引用。用for…of或者forEach可以按插入顺序遍历。常用API:

add()添加元素
has()返回是否包含某个元素
size返回元素数量
delete()删除某个元素
clear()删除所有元素