JavaScript 基础语法
JS基础语法
准备工作:
-
安装 node
pycharm 安装 node 插件【如果没有】
-
浏览器执行代码
注释
-
单行注释://
-
多行注释:
/* */
变量 !!
-
声明变量: 使用var关键字声明一个变量。
var a; -
变量赋值: 变量名称=变量赋值。
a = 10; -
声明并赋值:var 变量名称 = 值;
var a = 10;
定义变量的几种关键字
var: 定义的变量可以跨代码块访问
let: 定义的变量有效范围,只在代码块内
const: 用来定义常量,定义之后值是不可以修改的,只能在代码块内部访问
数据类型
-
Boolean:布尔值;
有两个字面值:true 和 false。
-
String:字符串;
String 数据类型表示零或多个字符序列。字符串可以使用双引号(")、单引号(')或反引号(`)标示。
-
Number:数值;
表示整数和浮点值。
-
Undefined:未定义;
Undefined 类型只有一个值,就是特殊值 undefined。当声明了变量但没有初始化时,就相当于给变量赋予了 undefined 值
-
Null:null;
Null 类型同样只有一个值,即特殊值 null。
-
Object:对象;
对象其实就是一组数据和功能的集合。对象通过 new 操作符后跟对象类型的名称来创建。
typeof 操作符
如何确定任意变量的数据类型?typeof 操作符就是为此而生的。对一个值使用 typeof 操作符会返回下列字符串之一:
-
"undefined"表示值未定义;
-
"boolean"表示值为布尔值;
-
"string"表示值为字符串;
-
"number"表示值为数值;
-
"object"表示值为对象(而不是函数)或 null;
-
"function"表示值为函数;
-
"symbol"表示值为符号;
因为 typeof 是一个操作符而不是函数,所以不需要参数(但可以使用参数)。
调用typeof null 返回的是"object"。这是因为特殊值 null 被认为是一个对空对象的引用。
强制类型转换
转换为 String 类型
-
方式一:toString()
调用被转换数据类型的toString()方法,该方法不会影响到原变量,它会将转换的结果返回。
但是注意:null和undefined这两个值没有toString()方法,如果调用它们的方法,会报错。
var a = 123; a_s = a.toString(); console.log(typeof a); // number console.log(typeof a_s); // string -
方式二:String()
调用String()函数,并将被转换的数据作为参数传递给函数。
var a = 123; a_s = String(a); console.log(typeof a); // number console.log(typeof a_s); // string使用String()函数做强制类型转换时,对于Number和Boolean实际上就是调用的toString()方法。但是对于null和undefined,就不会调用toString()方法,它会将null 直接转换为 “null”,将 undefined 直接转换为 “undefined”。
-
方式三:拼接
为任意的数据类型 +""。
var a = 123; a_s = a + ""; console.log(typeof a); // number console.log(typeof a_s); // string
转换为Number 类型
-
方式一:Number()
Number()可以用来转换任意类型的数据。
-
字符串 → 数字
纯数字:转换为数字;
包含非数字:转换为 NaN(Not a Number);
空字符串(含空格):转换为 0;
-
布尔 → 数字
true:1
false:0
-
null → 数字
0
-
undefined → 数字
NaN
-
-
方式二:parseInt()
这种方式专门用来对付字符串,parseInt() 把一个字符串转换为一个整数。
a = "123"; na = parseInt(a); console.log(na); // 123 -
方式三:parseFloat()
这种方式专门用来对付字符串,parseFloat() 把一个字符串转换为一个浮点数。
a = "123"; na = parseFloat(a); console.log(na); // 123注意:如果对非String使用parseInt()或parseFloat(),它会先将其转换为String然后在操作。
流程控制 !!
分支语句
if
if (expression1) {
statement
} else if (expression2) {
statement
} else {
statement
}
switch
switch (expression) {
case value1:
statement
break;
case value2:
statement
break;
case value3:
statement
break;
default:
statement
}
- 这里的每个 case(条件/分支)相当于:如果表达式等于后面的值,则执行下面的语句。
- break关键字:会导致代码执行跳出 switch 语句。如果没有 break,则代码会继续匹配下一个条件。
- default关键字:用于在任何条件都没有满足时指定默认执行的语句(相当于 else语句)。
异常处理
在 JavaScript 中,异常处理是通过 try...catch 语句来实现的,用于捕获和处理运行时出现的错误。以下是一些关于异常处理的关键点:
-
try 块
try 块包含可能抛出错误的代码。如果在 try 块内发生错误,控制权将立即转移到相应的 catch 块。
-
catch 块
catch 块用于捕获 try 块中的错误。它接受一个参数,通常命名为 error,用来保存错误对象。在 catch 块中,你可以处理错误,例如打印错误信息或采取其他恢复策略。
try{
// 存放有可能会出现异常的代码块
var a = 100
} catch(error){
// try中的代码出现了异常,才会执行catch中的代码
console.log(error.message)
console.log('详细的错误信息:',error)
a = 99
}
console.log(a)
循环语句
while
while (expression) {
statement
}
for
for (initialization; expression; post - loop - expression) {
statement
}
函数 !!
创建函数
-
函数声明
function sum(num1, num2) { return num1 + num2; } -
函数表达式
var sum = function (num1, num2) { return num1 + num2; }; -
Function 构造函数
var sum = new Function("num1", "num2", "return num1 + num2"); -
箭头函数
var sum = (num1, num2) => { return num1 + num2; };
JavaScript 中的函数是优先编译,即函数调用可以写在函数声明之前。
函数调用
-
直接调用
函数名称(参数); 等价于 window.函数名称(参数); -
上下文调用(apply、call)
function sum(num1, num2) { return num1 + num2; } res = sum.call(null, 1, 2) console.log(res); // 3 res = sum.apply(null, [1, 2]) console.log(res); // 3
call()和apply()这两个方法都是函数对象的方法,需要通过函数对象来调用,当对函数调用call()和apply()都会调用函数执行。
匿名函数
没有名字的函数就是匿名函数,它可以让一个变量来接收,也就是用 “函数表达式”方式创建和接收。
var fun = function () {
alert("我是一个匿名函数");
}
fun();
自执行函数
-
()
(function () { console.log("自执行函数"); })(); -
!
!function () { console.log("自执行函数"); }();
以上两种常见,除此之外还有“~ + -”三种少见的自执行方式。
作用域
函数内部定义的变量只能在函数内部访问,函数内部可以访问函数外部的变量。
对象 !!
对象就是一组没有特定顺序的值。对象的每个属性或方法都由一个名称来标识,这个名称映射到一个值。
创建对象
-
var 对象名称 = new Object();
var obj = new Object(); console.log(obj); // 设置属性 obj.name = "obj"; // 设置方法 obj.test = function () { console.log("obj 的 test 方法"); } console.log(obj); // { name: 'obj', test: [Function (anonymous)] } -
var 对象名称 = {}
var obj = { name: "obj", test: function () { console.log("obj 的 test 方法"); } } console.log(obj); // { name: 'obj', test: [Function: test] } -
构造函数
构造函数就是一个普通的函数,创建方式和普通函数没有区别,不同的是构造函数习惯上首字母大写。
构造函数和普通函数的还有一个区别就是调用方式的不同,普通函数是直接调用,而构造函数需要使用new关键字来调用。
function F() { this.name = "obj"; this.test = function () { console.log("obj 的 test 方法"); } } var obj = new F(); console.log(obj);
访问属性/方法
-
对象.属性名称/方法名称
console.log(obj.name); // obj obj.test(); // obj 的 test 方法 -
对象['属性/方法名称']
console.log(obj['name']); // obj obj['test'](); // obj 的 test 方法 -
遍历对象
var obj = new F(); for (k in obj) { if (obj[k] instanceof Function) { obj[k](); break; } console.log(obj[k]); }
函数和对象方法中的this
-
函数中的 this
window
// 定义了一个函数demo function demo (){ console.log('demo函数this:',this) } -
对象方法中的this
对象本身
// 定义了一个对象objA const objA = { name:"张三", age:18, work(){ console.log('这是是work方法,this:',this) console.log('这是是work方法,this.name:',this.name) } } -
箭头函数中的this
代表的是外层作用域的对象
// 定义了一个对象objA const objA = { name:"张三", age:18, work2:() =>{ console.log('这是是work2方法,this:',this) console.log('这是是work2方法,this.name:',this.name) } }
常见对象
字符串 - String
在JS中为我们提供了三个包装类,通过这三个包装类可以将基本数据类型的数据转换为对象。
-
String():可以将基本数据类型字符串转换为String对象;
-
Number():可以将基本数据类型的数字转换为Number对象;
-
Boolean():可以将基本数据类型的布尔值转换为Boolean对象;
字符串常见方法
-
charCodeAt():该方法获取指定位置字符的字符编码(Unicode编码)
var res = "a".charCodeAt(); console.log(res) // 97 -
fromCharCode():该方法接受任意多个数值,并返回将所有数值对应的字符拼接起来的字符串
var res = String.fromCharCode(97); console.log(res); // a -
indexof():该方法可以检索一个字符串中是否含有指定内容,如果字符串中含有该内容,则会返回其第一次出现的索引,如果没有找到指定的内容,则返回-1
console.log("alice".indexOf("l")); // 1 -
slice():可以从字符串中截取指定的内容,不会影响原字符串,而是将截取到内容返回
console.log("alice".slice(1,3)); // li -
split():该方法可以将一个字符串拆分为一个数组,需要一个字符串作为参数,将会根据该字符串去拆分数组
console.log("alice".split("")); // [ 'a', 'l', 'i', 'c', 'e' ]
JSON
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它基于 JavaScript 语言的一个子集,采用完全独立于语言的文本格式,易于人阅读和编写,同时也易于机器解析和生成。
数据结构
- 对象: 由花括号 {} 包围,键值对组成,键和值之间用冒号 : 分隔,键值对之间用逗号 , 分隔。键必须是字符串,用双引号包围。
- 数组: 由方括号 [] 包围,元素之间用逗号 , 分隔。
转换
JSON.stringify(value[, replacer[, space]]):将 JavaScript 值转换为 JSON 字符串。JSON.parse(text[, reviver]):将 JSON 字符串转换回 JavaScript 值。
let obj = {
name:"张三",
age:18,
sex:"男",
datas:[11,22,33,44,55,66],
skill(){
console.log('12345678')
}
}
// 1、将js的对象转换为json数据
const res = JSON.stringify(obj)
console.log(res)
// 2、将json数据转换为js对象
data = '{"name":"张三","age":18,"sex":"男","datas":[11,22,33,44,55,66]}'
const res2 = JSON.parse(data)
console.log(res2)
数组 - Array !!
Array数组是一组有序的数据,但跟其他语言不同的是,数组中每个槽位可以存储任意类型的数据。这意味着可以创建一个数组,它的第一个元素是字符串,第二个元素是数值,第三个是对象。数组也是动态大小的,会随着数据添加而自动增长。
创建数组
-
Array 构造函数
var colors = new Array(); // 可以省略 new以给 Array 构造函数传入要保存的元素
var colors = new Array("red", "blue", "green"); -
使用数字字面量
var colors = ["red", "blue", "green"];
数组常用方法
-
shift():该方法可以删除数组的第一个元素,并将被删除的元素作为返回值返回
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9] console.log(arr.shift()); // 1 console.log(arr); // [2, 3, 4, 5,6, 7, 8, 9] -
pop():该方法可以删除数组的最后一个元素,并将被删除的元素作为返回值返回
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9] console.log(arr.pop()); // 9 console.log(arr); // [1, 2, 3, 4,5, 6, 7, 8] -
unshift():该方法向数组开头添加一个或多个元素,并返回新的数组长度
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9] console.log(arr.unshift(66)); // 10 console.log(arr); // [66, 1, 2, 3, 4,5, 6, 7, 8, 9] -
push():该方法可以向数组的末尾添加一个或多个元素,并返回数组的新的长度
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9] console.log(arr.push(99)); // 10 console.log(arr); // [1, 2, 3, 4, 5,6, 7, 8, 9, 99] -
forEach():该方法可以用来遍历数组
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9] arr.forEach(function (value, index, array) { console.log(value); // 当前元素 console.log(index); // 当前元素索引 console.log(array); // 当前数组 });
时间 - Date
在 JavaScript 中使用 Date 对象来表示一个时间,如果直接使用构造函数创建一个 Date 对象,则会封装为当前代码执行的时间。
getTime() 返回日期的毫秒表示(时间戳):
var date = new Date();
console.log(date); // console.log(date);
console.log(date.getTime());//获取时间戳
正则 - RegExp
创建正则对象
-
使用 RegExp 构造函数创建
var pattern = new RegExp('hello', 'i');-
第一个参数:正则表达式模式(匹配的规则)
-
第二个参数:正则表达式标志
g:全局搜索,即不仅仅在找到第一个匹配项后停止,而是继续查找字符串中的所有匹配项。i:不区分大小写搜索。ig:忽略大小写且全局匹配模式。
-
-
使用字面量创建
var pattern = /hello/i;
正则表达式方法
-
test(str):检查字符串str中是否有匹配该正则表达式的文本,返回 true 或 false。
var pattern = new RegExp('hello', 'i'); str = "hello world"; var res = pattern.test(str); console.log(res); // true var pattern = /hello/i; str = "hello world"; var res = pattern.test(str); console.log(res); // true -
exec(str): 在字符串 str 中执行正则表达式匹配,并返回一个数组,其中包含了匹配的结果。如果没有匹配项,则返回 null。
var pattern = new RegExp('hello', 'i'); str = "hello world"; var res = pattern.exec(str); console.log(res); // 'hello', index: 0, input: 'hello world', groups: undefined ] var pattern = /hello/i str = "hello world"; var res = pattern.exec(str); console.log(res); // 'hello', index: 0, input: 'hello world', groups: undefined ]
定时器
setTimeout
setTimeout() 用于指定在一定时间后执行某些代码,它返回一个代表定时器的 ID。
let timerId = setTimeout(func|code, delay, [arg1, arg2, ...]);
参数:
func|code:要执行的函数或要执行的代码字符串。delay:在执行函数或代码之前要等待的 毫秒数 。[arg1, arg2, ...]:(可选)传递给函数的参数列表。
示例:
setTimeout(function () {
console.log('这个消息将在2秒后显示');
}, 2000);
setInterval
setInterval()用于指定每隔一段时间执行某些代码(重复执行),它返回一个代表定时器的 ID。
let intervalId = setInterval(func|code, delay, [arg1, arg2, ...]);
参数与 setTimeout 的一样。
示例:
let counter = 0;
const intervalId = setInterval(function () {
console.log('这个消息将每秒显示一次,计数器值:', counter++);
}, 1000);
清除定时器
- 使用
clearTimeout(timerId)来清除由setTimeout创建的定时器。 - 使用
clearInterval(intervalId)来清除由setInterval创建的定时器。
异步请求
AJAX(Asynchronous JavaScript and XML)是一种在不重新加载整个网页的情况下,能够更新部分网页的技术。虽然名称中包含 XML,但现代的 AJAX 实现通常使用 JSON 或其他数据格式代替 XML。
原生 ajax
开始 ajax 请求的第一步创建一个 XMLHttpRequest 对象,这个对象是浏览器提供的 API,用于与服务器进行异步通信。
function getData() {
// 1、创建一个请求对象
xhr = new XMLHttpRequest();
// 2、通过open方法设置请求的url和请求的参数
xhr.open('GET', 'http://localhost:3000/api/data', true);
// 3、设置ajax请求发送之后的回调函数
xhr.onload = function () {
console.log('响应状态码:', xhr.status);
console.log('响应体内容', xhr.responseText);
}
// 4、请求头的设置
xhr.setRequestHeader('token', '12345678');
// 5、发送请求
xhr.send();
}
- open():设置请求类型(GET、POST等)、URL和是否异步执行;
- setRequestHeader():设置请求头;
- send():发送请求,该函数的参数是请求的参数。
jQuery ajax
jQuery AJAX 是 jQuery 库提供的一组用于执行异步 HTTP 请求的方法,它封装了浏览器原生的 XMLHttpRequest 对象,简化了客户端与服务器之间的数据交互操作。
使用 jQuery ajax 时,需要先获取 jQuery 库,可以直接导入在线的 jQuery:
function getData() {
$.ajax({
url: "http://localhost:3000/api/data",
type: "get",
headers: {
'token': '12345678'
},
success: function (response, textStatus, jqXHR) {
console.log('响应状态码:', jqXHR.status);
console.log('响应状态:', textStatus);
console.log('响应体:', response);
}
});
}
- url:表示目标请求的 url。
- type:表示发送请求的方式;
- headers:表示设置的请求头;
- success:表示请求成功后回调的方法。
Fetch API
Fetch API 提供了一种更简单、更强大的方式来进行 HTTP 请求,相比传统的 XMLHttpRequest 更加现代化和易于使用。
async function getData() {
let url = 'http://localhost:3000/api/data'
let config = {
method: "GET",
headers: {
"token": "12345678"
}
};
try {
const response = await window.fetch(url, config)
console.log('请求成功:', response)
} catch (error) {
console.log('请求发送出现错误了:', error)
}
}

浙公网安备 33010602011771号