JavaScript Basic

当在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 John
  • Array (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;
	}
})
Back to top arrow

评论

发表回复

目录