当在html中写<script src=”main.js”></script 网页就会产生user交互的行为
获取DOM的值从网页表单获取用户输入的内容
- document.getElementById根据ID获取DOM
- document.querySelector根据选择器来获取DOM 跟css强相关
- document.querySelectorAll根据选择器来获取所有匹配的元素
input的输入和值的获取 .value
document.getElementById().value 就能获取到input里面的值,也能用 = 去给它赋值
checkbox获取值 && 赋值 .checked
document.getElementById().checked选中了返回值是true 没选中是false. 赋值的话 就 =turn || =false就能让checkbox变成选中或者未选中
监听事件 当input或者checkbox变化时随时获取更新到值
.onblur addEventListener(‘event’) event有: blur, click, change, style,
JavaScript
/**
* `event有: blur, click, change, style, style.backgroundColor, keydown, focus
* blur 当点击别处时发生变化
* click
* change
* style 后面可以跟css tag
* style.backgroundColor = 'red' change the backgroundColor
* keydown
* focus
*/Fetch 法用于发起获取资源的请求,它会返回一个会在请求响应后兑现的 promise。
body: 发送给服务器的数据。GET 请求通常没有 body,所以用 undefined。
headers: 告诉服务器你发送了什么数据格式,和附加的 token 认证信息。
POST DELETE PUT GET
JavaScript
// fetch 返回的是一个 Promise,你可以用 .then() 来处理响应。
fetch(URL, {
method: "POST";
headers: {
"Content-Tpye"
},
内置元素&函数用法
JavaScript
document.createElement('span') // span tag在html中
span.innerText = ‘Email’ // 会在html的 span tag后显示 Email
input.setAttribute('input', 'text') // input tag 后加入 属性
div.appendChild(span)
div.appendChild(input)
document.getElementById('email-list').appendChild('div')
判断日期是否合法
JavaScript
function isValidDate(){
const dateStr = getBirth();
const dateArr = dateStr.split("/");
const targetDateStr = `${dateArr[1]}/${dateArr[0]}/${dateArr[2]}`;
return !isNaN(Date.parse(targetDateStr));
}
/**
* new Date('00/00/0000') 会返回Invalid Date
* Date.parse(new Date('00/00/0000')) 会返回NaN
* 重点是 isNaN()函数
* isNaN(1) 会返回fales
* isNaN(NaN) 会返回true
*/
JavaScript
fullName.onblur = function(){
console.log('fullName: ', fullName.value);
}; // 在input输入框内 改了名字 在点一下周围就会获取到新的
selectAll.addEventListener('chane', function(){
console.log('fullName: ',selectAll.checked );
})// checkbox 也会更新的 false or true
正则表达式的判读和使用
- 正则表达式是通过 / (中间是表达式) /来使用
JavaScript
// 检查valid date是否合法
if(!/[0-9]{2}\/[0-9]{2}\/[0-9]{4}/.test(date.value)){
console.log("Please input a vaild date")
}
语法 & 变量
JavaScript
var x = 3;
var y = 2;
var sum = x + y;
console.log(sum); //能将结果打印出来
// 这就是注释
JavaScript
/**
* 定义一个函数,接收两个数值,返回两个值 加的和
* num 1
* num 2
*/
function add(num1, num2){
return num1 + num2;
}
console.log(add(1,2));
/**
* 赋值给sum
*/
let sum = 0;
变量和赋值
var, let, const 常见变量 (var基本已经不用了在ES6中)
JavaScript
var num1 = 5; // var 是关键字 num1 是变量名字, 这是把5赋值给num1
var num2 = 6;
var sum = num1 + num2;
console.log(sum); // 输出11
sum = "JavaScript"// 可以给变量重新赋值
// 输出 11 也输出 JavaScript
let num = 1;
const PI = 3.142 ;
JavaScript
var num = 5;
console.log(num);
num = "JavaScript";
console.log(num) // 动态弱类型language
数据类型
Number (基本数据类型)
能表示整数,负数,小数
String
- 用双引号表示
"" "Sting""3.1415926"
- 用双引号表示
Bool
JavaScript
表示俩个值是否相等 <code>var is Equal = num1 === str1; console.log(num); // 打印False</code>null + undefined
JavaScript
var nullVal = null; //null
var undefined; // undefined
/**
* undefined 应用场景
* 声明变量,但未初始化
* 定义一个函数,但是没有给返回值 (返回值默认是‘undefined’)
* 访问一个不存在的对象属性时,这是属性返回的值是 undefined
*/
/**
* Null 应用场景
* 一般它用来清空变量原有的值或者原有的引用
* 主要用于赋值给一些可能会返回对象的变量,作为初始化。
**/
<code class="language-javascript" lang="javascript"></code>Object 键值对
JavaScript
// 创建一个对象
var person = {
name: "John",
age: 30,
greet: function() {
console.log("Hello, my name is " + this.name);
},
};
//访问对象的属性和方法
console.log(person.name); // 输出 John
console.log(person.age); // 输出 30
person.great(); // 输出 hello my name is JohnArray (first-in-last-out) stack的原理
JavaScript
// new 运算符来创建数组
vary students = new Array("Tom", "Jack", "Rose")
console.log(student[0]) // 第一个student Tom
// 直接赋值创建数组
var fruits = ["apple", "bananas", "pears"]
console.log(fruits[0]) // 输出apple
// 数组内置方法 添加数组
fruits.push("grape") // fruits = ["apple", "bananas", "pears", "grape"]
fruits.pop() // 会把最后一个元素给弹出,他会输出“grape” Funciton — 引用类型(也属于object 存储在variable中)
JavaScript
/**
* 关键字 function 声明一个函数
* 函数名字
* 括号传递函数参数
* {}里面是函数体
* return 返回值
* greet 是函数名字, name 是参数
*/
function greet(name) {
alert("Hello, ${name}!"); // alert是弹窗
}
// 有返回值的function
function add(num1, num2){
return num1 + num2;
}
// 通过匿名函数赋值给变量的形式,声明一个函数, 匿名函数没有函数名字
// 这时候用函数的时候就变成了 multiply(2,3) 输出 6
var multiply = function (num1, num2) {
return num1 * num2;
}- RegExp 正则表达式
字符串检索和检测
JavaScript
// 定义一个有规则的正则表达式
var regex = /hello/i; // 匹配不区分大小的“hello” 因为有i
// 使用正则表达式内置方法, text来判断字符串是否符合规则
var result = regex.test("Hello world!"); // true
// 正则表达式做替换
var str = "Hello world";
// 替换str所有匹配的hello
var newSrt = str.replace(regex, "Hi");
console.log(newStr); //输出 "Hi world"
/**
* 定义方式
*/
// 通过 “//” 来定义
var reg = /hello/; 区分大小写的hello
// 通过 new 关键字加上 RegExp 构造函数
var reg_1 = new RegExp('hello', 'i') // 区分大小写的“hello”
- Data 日期对象
JavaScript
var date = new Date();
console.log(date); // 获取当前的系统日期
// 输出Wed Mar 05 2025 16:23:47 GMT+1100 (Australian Eastern Daylight Time)
// 可通通过 date.toLocaleString()获取日期的str
console.log(date.toLocaleString());// 输出 3/5/2025
// 还有API操作日期
console.log(date.getFullYear()); // 获取年份
console.log(date.getMonth() + 1); // 获取“正确”的月份 "计算机的索引是从0开始, 正常月份是1-12, 因此正确月份是+1"
console.log(date.getDate()); // 获取今天几号
console.log(date.getDay()); // 获取星期几 0代表Sunday 1代表Monday 2代表Tuesday 3代表Wednesday 4代表Thursday 5代表Friday 6代表Saturday
console.log(date.getHours()); // 获取小时
console.log(date.getMinutes()); // 获取分钟
console.log(date.getSeconds()); // 获取秒
Date.now() //能获得一个time stamp 单位是毫秒,距离公元元年的时间- Math 内置对象
JavaScript
// 所有属性和方法都是static,不需要通过new关键字来去实例化
console.log(Math.PI); //获取圆周率
console.log(Math.abs(-1)); // 数字绝对值 1
console.log(Math.ceil(1.1)); // 向上取整 1
console.log(Math.floor(1.9)); // 向下取整 1
console.lgo(Math.round(1.5)); // 四舍五入 2
console.log(Math.max(1, 2, 3, 4, 5)); // 寻找最大值 5
console.log(Math.min(1, 2, 3, 4, 5)); // 寻找最小值 1
console.log(Math.random();) // 生成0-1之间的随机数值类型 (数据类型判断)
JavaScript
// typeof 运算符来进行判断
var typeVar; // 没赋值
console.log(typeof typeVar); // "undefined"
typeVar = 26;
console.log(typeof typeVar); // "number"
typeVar = hello;
console.log(typeof typeVar); // "string"
typeVar = true;
console.log(typeof typeVar); // "boolean"
if (typeof typeVar === 'undefined'){
typeVar = 26;
} else {
console.log('当前值不是undefined')
}
typeVar = null;
console.log(typeof typeVar); // 输出object
console.log(typeVar === null); // 输出true- 引用类型
JavaScript
var arr = [1, 2, 3]; //arry
var obj = { name: "Yafei", age: 25}; // object
var greet = function(){
console.log('hello');
};
console.log(typeof arr); // 输出object
console.log(typeof obj); // 输出object
console.log(typeof greet); // 输出function
// typeof 无法得到引用类型的准确的值类型
// 可以用instanceof 来判断引用类型
console.log(arr instanceof Array) // 输出ture
// 也可以通过Object.prototype.toString.call(target)来判断
if (Object.prototype.toString.call(arr) === '[object Array]'){
alert('arr is a Array object ')
};运算符
- 算数运算符
JavaScript
var num1 = 10;
var num2 = 3;
console.log(num1 + num2); // 13
console.log(num1 - num2); // 7
console.log(num1 * num2); // 30
console.log(num1 / num2); // 3.3333333
console.log(num1 % num2); // 取余运算 1
console.log(num1 ** num2); // 幂运算 1000
num1++ // 代表着自增 11- 赋值运算符
JavaScript
var num = 10; // 等号就是赋值
num += 5; // 15
num *= 2 // 20
num /= 2 // 5- 比较运算符
JavaScript
var x = 5;
var y = 10;
console.log(x === y);// false “===”绝对等于 值和类型都相等
console.log(x == y); // false
console.log(x != y); // true
console.log(x !== y) // true "!=="绝对不等于 值和类型都不相等
console.log(x > y); // false
console.log(x < y); // true
console.log(x <= y); // true
console.log(x >= y); // false
var pi = 3.14;
var piStr = "3.14"
console.log(pi == piStr) // ture
console.log(pi === piStr) // fales- 逻辑运算符(&& ||)
JavaScript
// 逻辑运算符比较的都是boolean类型
var x = true;
var y = false;
true && false; // false 逻辑与运算 类似于.py的and
true || false; //true 逻辑或运算 类似于.py的or
!true; // false // ! 类似于.py的not
!false // true- 三元运算符(?:)
JavaScript
var num1 = 5;
var num2 = 10;
if (num1 > num2){
console.log(num1 + "大于" + num2);
} else {
console.log(num1 + "小于" + num2);
};
//通过三元运算符可简化
/**
* 给定两个条件是与否
* 如果True执行?后面的语句
* 如果false执行:后面语句
*/
(num1 > num2) ? console.log(num1 + "大于" + num2) : console.log(num1 + "小于" + num2);- 字符串运算符
JavaScript
console.log("luffy" + "Wang") // luffy Wang
var myString = "Wang"
myString += "Yafei" // 'Wang Yafei'
- 逗号运算符(,)
JavaScript
var num1 = 1, num2 = 2; // 一个语句能赋值两个变量 用逗号
var i, j;
for (i = 1, j = 9; i < j; i++, j--){
console.log(i, j);
}
/**
* 1 9
* 2 8
* 3 7
* 4 6
*/- 关系运算符(in, instanceof)
JavaScript
var obj = {
name: "Luffy",
age: 26,
email: "[email protected]"
};
// 判断name属性是否在obj里
"name" in obj; // true
"address" in obj; // false
// instanceof 也是关系运算符
var date = new Date();
date instanceof Date; // true- 位运算符
JavaScript
let c = 5; // 0101 二进制
let d = 3; // 0011
console.log(c & d);// 输出:1(按位与)
console.log(c | d);// 输出:7(按位或)
console.log(c ^ d);// 输出:6(按位异或)
console.log(c << 1);// 输出:10(左移)
console.log(c >> 1);// 输出:2(右移)- 一元运算符(delete, typeof)
JavaScript
var person = {
name: "John",
age: 26,
email: "[email protected]"
}
// 一元运算符 delete 用来删除对象的属性
delete person.age;
console.log(person) // {name: "John", email: "[email protected]"}
// typeof 也是一元运算符
var num = 1;
typeof nume; // number条件判断
- if – else
JavaScript
var score = 70;
var pass;
if (score >= 60) {
pass = true;
} else {
pass = fase;
}
console.log("Pass the Lesson" + pass);
// 单用一个if
var temperature = 30;
if (temperature > 25) {
console.log("today is so hot!");
}
// if else
if (temperature > 25) {
console.log("today is so hot!");
} else {
console.log("today is nice and cool!");
}- if – else – if
JavaScript
calculate.onclick = function.gerElementById("calculate");
calculate.onclick = function() {
var score = document.getElementById("score").value
if (score >= 85) {
alert("high distinction");
} else if (socre >= 75) {
alert("distinction");
} else if (socre >= 65) {
alert("credit"); {
} else if (socre >= 50) {
alert("pass");
} else {
alert("fail")
}
}
// function 内部就是的if else if- switch
JavaScript
// switch 语句就是switch(表达式){case 值1: 代码语句; break; case 值2: 代码语句 break; default: 代码块;} 跟if else if 有点像
// 获取星期几特别适合switch语句(能够穷举的数据)
function calWeekDay(weekday){
switch (new Date().getDay()){
case 0:
day = "Sunday";
break;
case 1:
day = "Monday";
break;
case 2:
day = "Tuesday";
break;
case 3:
day = "Wensday";
break;
case 4:
day = "Thusday";
break;
case 5:
day = "Friday";
break;
case 6:
day = "Saturday";
break;
}
}循环
- for
JavaScript
for (var i = 0; i < 5; i++) {
console.log('i = ' + i)
}
// 可以和逗号运算符搭配使用
for (var i = 0, j = 5; i < j; i++, j--){
console.log('i = ' + i + ', j = ' + j);
}
// 面试题 数组去重
function uniqueArray(arr){
var result = [];
for (var i = 0; i < arr.length; i++){
var isDuplicate = false;
for (var j = 0; j < result.length; j++){
if (arr[i] === result[j]) {
isDuplicate = true;
break;
}
}
if (!isDuplicate) {
result.push(arr[i]);
}
}
return result;
} - While
JavaScript
var i = 0
while (i < 10) {
console.log(i);
i++;
}- do – while
JavaScript
//成功与否
var success = false;
// 尝试次数
var attempts = 0;
// 最大尝试次数
var maxAttempts=3;
do {
attempts++;
//模拟操作(例如网络请求或文件读写)
success = Math.random()>0.5;// 随机成功或失败
console.log("Attempt " + attempts +(success ? " succeeded." :" failed."));
} while(!success && attempts < maxAttempts);
if(!success){
console.log("Operation failed after " + maxAttempts + " attempts.");
} else {
console.log("Operation succeeded after " + attempts + " attempts.");
}- 循环控制 Break
JavaScript
// 在指定序列中找到想要数字的位置
var arr = [1, 66, 2, 3, 4, 5, 6, 7, 8, 9];
for (var i = 0; i < 10; i++) {
console.log("currently location: ", i, "vaule is ", arr[i]);
arr[i] === 66 && console.log("congratulation you find the 66! location is ", i);
}
/** 后面的8次循环是浪费的
currently location: 0 vaule is 1
currently location: 1 vaule is 66
congratulation you find the 66! location is 1
currently location: 2 vaule is 2
currently location: 3 vaule is 3
currently location: 4 vaule is 4
currently location: 5 vaule is 5
currently location: 6 vaule is 6
currently location: 7 vaule is 7
currently location: 8 vaule is 8
currently location: 9 vaule is 9
*/
var arr = [1, 66, 2, 3, 4, 5, 6, 7, 8, 9];
for (var i = 0; i < 10; i++) {
console.log("currently location: ", i, "vaule is ", arr[i]);
if (arr[i] === 66){
console.log("congratulation you find the 66! location is ", i);
break;
}
}
/** 后面的8次循环是浪费的
* currently location: 0 vaule is 1
* currently location: 1 vaule is 66
* congratulation you find the 66! location is 1
*/- Continue
JavaScript
var students = [{name: "Yafei", score: 99},{name: "Luffy", score: 70},{name: "Wang", score: 91},{name: "Li", score: 89}];
for (var i = 0; i < students.length; i++) {
if (students[i].score < 90){
// 低于90,跳出本次迭代
continue;
}
console.log(students[i].name + "high distinction of student score: ", students[i].socre);
}
// 只会打印出来90分以上的- label
JavaScript
var matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9],
];
for (var i = 0; i < 3; i++){
for (var j = 0; j < 3; j++) {
if (i >= 1 && j >=1){
break; // 跳出循环,只跳出当前循环(j)
}
console.log('matrix[${i}][${j}]:', matrix[i][j]);
}
} // 输出 1 2 3 4 7
// 使用label
outerLoop: for (var i = 0; i < 3; i++){
for (var j = 0; j < 3; j++) {
if (i >= 1 && j >=1){
break outerLoop; // 跳出最外层循环
}
console.log('matrix[${i}][${j}]:', matrix[i][j]);
}
} // 输出 1 2 3 4 JavaScript
firstLoop: for (var i = 0; i < 3; i++){
sencondLoop: for (var j = 0; j < 3; j++){
thirdLoop: for (var k = 0; k < 5; k++){
if (k === 2) {
break sencondLoop;
}
if (k === 3) {
break firstLoop;
}
console.log("i = " + i + ", j = " + j + ", k = " + k);
}
}
}
/**
* 打印输出
* i = 0, j = 0, k = 0
* i = 0, j = 0, k = 1
* i = 1, j = 0, k = 0
* i = 1, j = 0, k = 1
* i = 2, j = 0, k = 0
* i = 2, j = 0, k = 1
*/- for … in
JavaScript
var person = { name: "luffyzh", age: 29, email:"835531965"};
for (var key in person) {
console.log(key + ": " + person[key])
}
/**
* name: "luffyzh"
* age: 29
* email:"835531965"
*/- for … of 类似于python中的 for key,value in dictionary
JavaScript
// 遍历数组 遍历可迭代的对象
var arr = [2, 4, 6];
for (var value of arr){
console.log("value: " + value);
}
/**
* value: 2
* value: 4
* value: 6
*/
// 遍历字符串
var str = "hi";
for (var char of str){
console.log("char: " + char);
}
/**
* char: h
* char: i
*/函数
定义方式
JavaScript
// 1 声明函数
function greet(name){
alert('Hello ' + name);
}
// 调用
greet('Yafei') // Hello Yafei
// 2 函数表达式 匿名函数
var sayHello = function(name) {
alert('Hello ' + name);
}
// 调用
sayHello('Yafei') // Hello Yafie
// 3 箭头函数 相当于省去了写function(name)
var sayGoodbye = (name) => {
alert('Hello ' + name);
}
// 调用
sayGoodbye('Yafei') // Hello Yafie
函数参数
JavaScript
// 函数参数 可以传入任意参数
function greet(name){
alert('Hello ' + name);
}
greet()// 你可以传递参数,也可以不传递,不传递就是undefined
/**
* 非常特殊的函数内置对象 -- arguments
* arguments有下标索引值
* arguments不是Array数据类型
*/
function showArguments(){
console.log('first value: ', arguments[0]); // first value: 1
console.log('second value: ', arguments[1]); // sencond value: 2
console.log('third value: ', arguments[2]); // third vaule: 3
console.log('Is arguments a Array: ', arguments instanceof Array); // Is arguments a Array: false
}
showArguments(1, 2, 3);
// 箭头函数当中不存在 arguments
var sayGoodbye = (name) => {
console.log(arguments);
} // arguments is not defined
返回值
JavaScript
// 写不写return 都有返回值
function add(num1, num2){
console.log(num1 + num2); // 它的值是undefined
return num1 + num2; // 他的值是number
}内置函数
JavaScript
/**
* parseInt: 将字符串转换成整数
* parseFloat: 将字符串转换成浮点数
* includes() 查找数组是否包含某个元素
* indexOf() 查找元素在数组的中的下标
* forEach() 内置函数提供遍历数组的元素的方法
*/
var num = "123.36"
parseInt(num); // 123
parseFloat(num); // 123.39
var arr = [1, 2, 3]
arr.inculdes(3); // true
arr.indexOf(2); // 1
arr.forEach(items) => {
console.log('item is: ', item)
}
// item is: 1
// item is: 2
// item is: 3回调函数
JavaScript
// 接收一个函数作为参数,在函数体中调用这个传递进来的参数函数
function processUserInput(callback){
const name = prompt('Please enter your name.'); // prompt是个api会有弹窗提出
callback(name); //在这个场景里可以理解为callback变成了greet
}
function greet(name){
alert('hello, ' + name);
}
// 调用的方法给了 greet
processUserInput(greet)
异步函数
JavaScript
// JavaScript 的异步函数主要用于处理那些耗时的操作(如网络请求、定时任务等),而不会阻塞主线程。下面是一些简单概念:
async function fetchData() {
try {
const response = await fetch('https://api.example.com/data');
const data = await response.json();
console.log(data);
} catch (error) {
console.error('Error:', error);
}
}
fetchData();
//在这个例子中,fetchData 是一个异步函数,通过 await 等待 fetch 请求完成,然后处理返回的数据。整个过程中,主线程不会被阻塞,从而能同时处理其他任务。JavaScript
function sum = (a) => (b) => (c) => {
}
function sum = (a) => {
sum(b) => {
sum(c) => {
}
}
}
function handlEvent = (a) => (b) => (c) => {
element.addEventListener(a, c)
}
属性描述符
JS提供了一个函数getOwnPropertyDescriptor(object, 'a') 会返回一个描述 (对象)
JavaScript
var obj = {
a = 1,
b = 2,
}
// 得到属性描述符
var des = Object.getOwnPropertyDescriptor(obj, 'a');
console.log(des);
/**
* 打印输出
* {value: 1, writable: true, enumerable: true, configurable: ture }
*/Object.defineProperty()能够设置属性描述符里面有get和set的函数
JavaScript
var obj = {
a = 1,
b = 2,
}
Object.defineProperty(obj, 'a', {
value:10,
writable:false, // 不可重写
enumerable:false, // 不可遍历
configurable:false, // 不可修改描述符本身
});
for (var key in obj) {
console.log(key); // 输出b 遍历不出来a
}
var keys = Objects.keys(obj);
console.log(keys); // 输出 ['b']
Object.defineProperty(obj, 'a', {
// 读取器 getter
get: function () {
console.log('Hello world';)
return 123;
}
// 设置器 setter
set: function (val) {
console.log('hahah');
}
}
console.log(obj.a) //get 函数里面是什么,就输出什么,先输出"Hello world" 再输出123
obj.a = 3+2 // 赋值操作 相当一执行了set函数
console.log(obj) // 先输出‘hahah’ 再输出Hello world" 再输出123通常用法有一个变量存储
JavaScript
var internalName = Ya;
Object.defineProperty(user, 'name', {
get: function () {
return internalName;
},
// 传一个参数
set: function (val) {
internalName = val;
}
})
发表回复
要发表评论,您必须先登录。