JavaScript网页脚本语言
JavaScript是一种完整的网页脚本语言,有自己独立的语法,可以完成复杂的程序逻辑,而HTML和CSS仅仅是标记语言,不具备编程语言的程序逻辑。
一、JavaScript简介
JavaScript与Java没有关系,JavaScript是一门前端工程师的编程语言,但是它本身有很多逻辑错误
Brendan Eich设计JavaScript的思路
(1)借鉴C语言的基本语法;
(2)借鉴Java语言的数据类型和内存管理;
(3)借鉴Scheme语言,将函数提升到"第一等公民"(first class)的地位;
(4)借鉴Self语言,使用基于原型(prototype)的继承机制。
ECMAScript,描述了该语言的语法和基本对象。
文档对象模型(DOM),描述处理网页内容的方法和接口。
浏览器对象模型(BOM),描述与浏览器进行交互的方法和接口二、JS基础
1.注释语法
2.引入JS的方式
(1)head内script标签内编写
| <!DOCTYPE html> |
| <html lang="en"> |
| <head> |
| <meta charset="UTF-8"> |
| <title>Title</title> |
| <script> |
| prompt('天气很冷','多喝热水') |
| </script> |
| </head> |
| <body> |
| |
| </body> |
| </html> |
(2)head内script标签src属性引入外部JS资源
| <!DOCTYPE html> |
| <html lang="en"> |
| <head> |
| <meta charset="UTF-8"> |
| <title>Title</title> |
| <script src="js.js"></script> |
| </head> |
| <body> |
| |
| </body> |
| </html> |
(3)body内最底部通过script标签src属性引入外部js资源(最常用)
由于代码从上而下运行,操作js代码一定要等待标签加载完毕次执行才可以正常运行,js代码则要放在最下面
3.结束符号
JS的结束符号是分号;
,也可以不写
三、变量与常量
JS代码的IDE
1.pycharm中创建JS文件,或者在html文件中编写js代码(适合编写复杂的JS代码)
2.浏览器的console中编写JS代码
1.JS中声明变量需要的关键字
| |
| var username = 'jason' |
| |
| |
| var name |
| name='qiuqiu' |
| 'qiuqiu' |
| name |
| 'qiuqiu' |
| var n = 999 |
| for (let n=0;n<10;n++){ |
| console.log(n) |
| } |
| VM741:1 0 |
| VM741:1 1 |
| VM741:1 2 |
| VM741:1 3 |
| VM741:1 4 |
| VM741:1 5 |
| VM741:1 6 |
| VM741:1 7 |
| VM741:1 8 |
| VM741:1 9 |
| n |
| 999 |
python中,for循环中使用的变量名,会在全局中生效
2.声明常量的关键字
声明常量使用关键字const
| const p = 3.14 |
| pageXOffset |
| 0 |
| p |
| 3.14 |
四、JS中的基本数据类型
JS是动态语言:变量中可以存储数值类型、字符类型的数据,从而根据存储内容的类型不同,来动态决定自己的类型
1.数值类型Number
在JS中整型和浮点型都属于Number,并没有细分
| parseFloat('456.56') |
| 456.56 |
NaN
也属于数值类型,意思是:不是一个数字Not A Number
2.字符类型String
(1)类型
| let name1=`duoduo` |
| let age1=18 |
| let desc=`my name is${name1} my age is ${age1}` |
| desc |
| 'my name isduoduo my age is 18' |

字符串拼接在js中推荐使用+ 号
,虽然在python中使用+
号底层效率较低,但是在例如JS的其他语言中+ 号
底层的拼接效率较高
(2)内置方法
方法 |
说明 |
.length |
返回长度 |
.trim() |
移除空白 |
.trimLeft() |
移除左边的空白 |
.trimRight() |
移除右边的空白 |
.charAt(n) |
返回第n个字符 |
.concat(value, ...) |
拼接,拼接字符串通常使用“+”号 |
.indexOf(substring, start) |
子序列位置 |
.substring(from, to) |
根据索引获取子序列 |
.slice(start, end) |
切片 |
.toLowerCase() |
小写 |
.toUpperCase() |
大写 |
.split(delimiter, limit) |
分割 |
| let s1 = ' mofei定律998 ' |
| |
| s1.length |
| 16 |
| |
| s1.trim() |
| 'mofei定律998' |
| |
| s1.charAt(9) |
| '律' |
| |
| s1.concat('多喝热水') |
| ' mofei定律998 多喝热水' |
| |
| s1+'多喝热水' |
| ' mofei定律998 多喝热水' |
| |
| s1.indexOf('律') |
| 9 |
| |
| s1.slice(5,9) |
| 'fei定' |
| |
| s1.toLowerCase() |
| ' mofei定律998 ' |
| |
| s1.toUpperCase() |
| ' MOFEI定律998 ' |
| |
| s1.split('9',1) |
| [' mofei定律']0: " mofei定律"length: 1[[Prototype]]: Array(0) |
3.布尔类型Boolean
在JS里面的布尔值为纯小写
| var a = true; |
| var b = false; |
| Boolean('') |
| false |
| Boolean(0) |
| false |
| Boolean(null) |
| false |
| Boolean(undefined) |
| false |
| Boolean(NaN) |
| false |
空数组的布尔值为true
4.null
和undefined
名称 |
含义 |
null |
表示值为空--曾经拥有过 |
undefined |
表示没有定义--从来没有过 |
null
表示值为空,一般在需要指定或者清空一个变量时才会使用,如
5.对象object
JavaScript 中的所有事物都是对象:字符串、数值、数组、函数...此外,JavaScript 允许自定义对象。
JavaScript 提供多个内建对象,比如 String、Date、Array 等等。
对象只是带有属性和方法的特殊数据类型
(1)对象之数组(Array
)
数组对象的作用是使用单独的变量名来储存一系列的值,类似于python中的列表
方法 |
作用 |
.length |
数组的大小 |
.push(ele) |
尾部追加元素 |
.pop() |
获取尾部的元素 |
.unshift(ele)`` |
头部插入元素 |
.shift() |
头部移除元素 |
.slice(start, end) |
切片 |
.reverse() |
反转 |
.join(seq ) |
将数组元素连接成字符串 |
.concat(val, ...) |
连接数组 |
.sort() |
排序 |
.forEach() |
将数组的每个元素传递给回调函数 |
.splice() |
删除元素,并向数组添加新元素。 |
map() |
返回一个数组元素调用函数处理后的值的新数组 |
| let ar1=[11,22,33,'duoduo'] |
| ar1[2] |
| 33 |
| |
| ar1.length |
| 4 |
| |
| ar1.push(ar1) |
| 5 |
| |
| ar1.pop() |
| (4) [11, 22, 33, 'duoduo']0: 111: 222: 333: "duoduo"length: 4[[Prototype]]: Array(0) |
| |
| ar1.unshift(ar1) |
| 5 |
| |
| ar1.shift(0) |
| (4) [11, 22, 33, 'duoduo'] |
| |
| ar1.slice(1,3) |
| (2) [22, 33] |
| |
| ar1.reverse() |
| (4) ['duoduo', 33, 22, 11] |
| |
| ar1.join('|') |
| 'duoduo|33|22|11' |
| |
| ar1.concat('球球') |
| (5) ['duoduo', 33, 22, 11, '球球'] |
| |
| ar1.sort() |
| (4) [11, 22, 33, 'duoduo'] |
| |
| ar1.splice(1,'qiuqiu') |
| []length: 0[[Prototype]]: Array(0) |
| ar2.map(function(value,index,arr){ |
| return value + 1 |
| }) |
| |
| [23, 34, 45, 56] |
(2)对象之自定义对象object
类似于python 的字典
| |
| let d1={'name':'duoduo','pwd':123} |
| |
| |
| typeof d1 |
| 'object' |
| |
| d1.name |
| 'duoduo' |
| |
| d1['name'] |
| 'duoduo' |
| |
| |
| d1.gender = 'male' |
| 'male' |
| |
| d1 |
| {name: 'duoduo', pwd: 123, gender: 'male'} |
五、运算符
1.算数运算符
符号 |
作用 |
+ |
加 |
- |
减 |
* |
乘 |
/ |
除 |
% |
去余数 |
++ |
自增1 |
-- |
子减1 |
| var x=10; |
| var res1=x++; 加号在后面 先赋值后自增 |
| var res2=++x; 加号在前面 先自增后赋值 |
2.比较运算符
| !=(值不等 弱) |
| ==(值相等 弱) |
| ===(值相等 强) |
| !==(值不等 强) |
3.逻辑运算符
六、流程控制
1.条件语句
(1)单if分支
(2)if...else分支
| if(条件){ |
| 条件成立执行的代码 |
| }else{ |
| 条件不成立执行的代码 |
| } |
(3)if...else if...else分支
| if(条件1){ |
| 条件1成立执行的代码 |
| }else if(条件2){ |
| 条件1不成立条件2执行的代码 |
| } |
| else{ |
| 条件1和2都不成立执行的代码 |
| } |
| var d=new Date() |
| |
| if (d.getDay()==0){ |
| alert("今天周末") |
| } else if (d.getDay()==6 ) { |
| alert("今天周末") |
| } else { |
| alert("今天工作日") |
| } |
(4)如果分支结构中else if很多还可以考虑使用switch语法
| switch(条件){ |
| case 条件1: |
| 条件1成立执行的代码; |
| break; |
| case 条件2: |
| 条件2成立执行的代码; |
| break; |
| case 条件3: |
| 条件3成立执行的代码; |
| break; |
| case 条件4: |
| 条件4成立执行的代码; |
| break; |
| default: |
| 条件都不满足执行的代码 |
| } |
| let d3=new Date() |
| switch (d3) { |
| case d3 ==0: |
| console.log("今天是周末") |
| break; |
| case d3 ==6: |
| console.log("今天是周六") |
| break; |
| default: |
| console.log("工作日") |
| |
| } |
| 工作日 |
break结束case后条件的语句,如果没有break会基于某个case一直执行下去
2.循环语句
(1)for循环
| for(起始条件;循环条件;条件处理){ |
| 循环体代码 |
| } |
| for(let i=0;i<10;i++){ |
| console.log(i) |
| } |
| let dd = {'name':'jason','age':18} |
| for(let k in dd){ |
| console.log(k) |
| } |
(2)while循环
七、函数
1.语法
| function 函数名(形参数){ |
| |
| 函数体代码 |
| return 返回值 |
| } |
2.函数类型
| function f1() { |
| console.log('你好') |
| }; |
| f1() |
| ---- |
| 你好 |
| function f2(a, b) { |
| console.log(arguments); |
| console.log(arguments.length); |
| |
| console.log(arguments[0],argument[1]); |
| console.log(a, b); |
| }; |
| |
| var s1 = function(a, b){ |
| return a + b; |
| } |
| var f=v=>v; |
| |
| |
| var f=function(v){ |
| return v |
| } |
3.函数中的注意事项
(1)JS中函数的形参与实参可以不对应,传少了就是显示underfined
(2) 函数中的arguments
,对于一个普通的函数,函数内部设置了一个arguments
对象,当用于接收实参个数不确定时,函数中的arguments
对象会自动接收多余参数
| function fn(){ |
| console.log(arguments) |
| } |
| fn(1,2,3) |
(3)JS中函数的返回值只会返回位于末尾一个,当需要多个返回值时,需要我们自己将其处理成一个整体
八、内置对象
1.时间对象
时间对象的方法 |
含义 |
.getDate() |
获取日 |
.getDay () |
获取星期 |
.getMonth () |
获取月(0-11) |
.getFullYear () |
获取完整年份 |
.getYear () |
获取年 |
.getHours () |
获取小时 |
.getMinutes () |
获取分钟 |
.getSeconds () |
获取秒 |
.getMilliseconds () |
获取毫秒 |
.getTime () |
返回累计毫秒数(从1970/1/1午夜) |
2.JSON对象
| let dd = {name:'duoduo',pwd:123} |
-
序列化JSON.stringify
序列化的结果需要用变量名来接收
| JSON.stringify(dd) |
| |
| '{"name":"duoduo","pwd":123}' |

3.正则对象RegExp
| var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{5,11}"); |
| var reg2 = /^[a-zA-Z][a-zA-Z0-9]{5,9}$/; |
编写代码,将当前日期按“2017-12-27 11:11 星期三”格式输出
| function time_string () { |
| const WEEK_NUM = { |
| 0: "星期日", |
| 1: "星期一", |
| 2: "星期二", |
| 3: "星期三", |
| 4: "星期四", |
| 5: "星期五", |
| 6: "星期六", |
| } |
| |
| |
| |
| let t = new Date() |
| let t_year = t.getFullYear(); |
| let t_month = t.getMonth(); |
| |
| let t_day = t.getDate(); |
| let t_hour = t.getHours(); |
| let t_minute = t.getMinutes(); |
| |
| let week = WEEK_NUM[t.getDay()]; |
| |
| let t_string= ` |
| ${t_year}-${t_month}-${t_day} ${t_hour}:${t_minute} ${week} |
| `; |
| console.log(t_string) |
| } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY