AI智能
改变未来

前端之JavaScript


前端之JavaScript

[toc]

1. JavaScript 发展历史

JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。

2. JavaScript基础语法

2.1 注释

JavaScript

中单行注释使用

//

,多行注释

/**/

// 这是单行注释/*这是多行注释的第一行,这是第二行。*/

2.2 变量和常量

在JavaScript中使用

var

let

定义变量:

  • 变量必须以字母开头
  • 变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)
  • 变量名称对大小写敏感(y 和 Y 是不同的变量)

var

定义的都为全局变量

let

可以声明局部变量

声明变量:

// 定义单个变量> var name> name = \'Hans\'//定义并赋值> var name = \'Hans\'> name\'Hans\'// 定义多个变量> var name = "Hans", age = 18> name\'Hans\'> age18//多行使用反引号`` 类型python中的三引号> var text = `A young idler,an old beggar`> text\'A young idler,\\nan old beggar\'

声明常量:

JavaScript

中使用

const

定义常量

> const pi = 3.14> pi3.14>  pi = 3.01Uncaught TypeError: Assignment to constant variable.at <anonymous>:1:4

2.3 基本数据类型

值类型(基本类型):字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。

引用数据类型:对象(Object)、数组(Array)、函数(Function)。

2.3.1 Number类型

> var a = 5> typeof a   //查看变量的类型number> var b = 1.3> typeof bnumber// 不管整型还是浮点型打开出来的结果都是number类型/*NaN:Not A NumberNaN属于数值类型 表示的意思是 不是一个数字*/parseInt(\'2345\')  // 转整型2345parseInt(\'2345.5\')2345parseFloat(\'2345.5\') // 转浮点型2345.5parseFloat(\'ABC\')NaNparseInt(\'abc\')NaN

2.3.2 String类型

> var name = \'Hans\'> typeof name\'string\'//常用方法// 变量值长度> name.length4// trim() 移除空白> var a = \'    ABC    \'> a\'    ABC    \'> a.trim()\'ABC\'//移除左边的空白> a.trimLeft()\'ABC    \'//移除右边的空白> a.trimRight()\'    ABC\'//返回第n个字符,从0开始> name\'Hans\'> name.charAt(3)\'s\'> name.charAt()\'H\'> name.charAt(1)\'a\'// 在javascript中推荐使用加号(+)拼接> name\'Hans\'> a\'    ABC    \'> name + a\'Hans    ABC    \'// 使用concat拼接> name.concat(a)\'Hans    ABC    \'//indexOf(substring, start)子序列位置> text\'A young idler,\\nan old beggar\'> text.indexOf(\'young\',0)2//.substring(from, to)	根据索引获取子序列> text.substring(0,)\'A young idler,\\nan old beggar\'> text.substring(0,10)\'A young id\'// .slice(start, end)	切片, 从0开始顾头不顾尾> name.slice(0,3)\'Han\'// 转小写> name\'Hans\'> name.toLowerCase()\'hans\'// 转大写> name.toUpperCase()\'HANS\'// 分隔> name\'Hans\'> name.split(\'a\')(2) [\'H\', \'ns\']

2.3.3 Boolean布尔值

JavaScript

中布尔值

true

false

都是小写

""(空字符串)、0、null、undefined、NaN都是false。

null和undefined

  • null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;
  • undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。

2.3.4 Array数组

使用单独的变量名来存储一系列的值。类似

python

中的列表。

> var array1 = [1, 2, 3, \'a\',\'b\',\'c\']> array1(6) [1, 2, 3, \'a\', \'b\', \'c\']> console.log(array1[2])  //console.log打印类似python中的print3// length元素个数> array1.length6// 在尾部增加元素,类型append> array1.push(\'D\')7> array1(7) [1, 2, 3, \'a\', \'b\', \'c\', \'D\']// 在头部增加元素> array1.unshift(0)8> array1(8) [0, 1, 2, 3, \'a\', \'b\', \'c\', \'D\']//取最后一个元素> array1.pop()\'D\'> array1(7) [0, 1, 2, 3, \'a\', \'b\', \'c\']//取头部元素> array1.shift()0> array1(6) [1, 2, 3, \'a\', \'b\', \'c\']//切片, 从0开始顾头不顾尾> array1.slice(3,6)(3) [\'a\', \'b\', \'c\']// 反转> array1.reverse()(6) [\'c\', \'b\', \'a\', 3, 2, 1]// 将数组元素连接成字符串> array1.join() // 什么不都写默认使用逗号分隔\'c,b,a,3,2,1\'> array1.join(\'\')\'cba321\'> array1.join(\'|\')\'c|b|a|3|2|1\'// 连接数组> var array2 = [\'A\',\'B\',\'C\']> array1.concat(array2)(9) [\'c\', \'b\', \'a\', 3, 2, 1, \'A\', \'B\', \'C\']// 排序> array1.sort()(6) [1, 2, 3, \'a\', \'b\', \'c\']// 删除元素,并可以向数据组中添加新元素(可选)> array1.splice(3,3)  // 删除元素(3) [\'a\', \'b\', \'c\']> array1(3) [1, 2, 3]> array1.splice(3,3,\'A\',\'B\',\'C\')  // 删除元素从添加新元素[]> array1(6) [1, 2, 3, \'A\', \'B\', \'C\']/*splice(index,howmany,item1,.....,itemX)index:必需,必须是数字。规定从何处添加/删除元素。howmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。item1, ..., itemX	可选。要添加到数组的新元素*/// forEach()	将数组的每个元素传递给回调函数> array1.forEach(function test(n){console.log(n)})123ABC// 返回一个数组元素调用函数处理后的值的新数组> array1.map(function(value){return value +1})(6) [2, 3, 4, \'A1\', \'B1\', \'C1\']

2.4 运算符

2.4.1 数学运算符

+ - * / % ++ --

> var a = 6> var b = 3// 加> a + b9// 减> a - b3// 乘> a * b18// 除> a / b2// 取模(取余)> a % b0// 自增1(先赋值再增1)> a++6> a7// 自减1(先赋值再减1)> a--7> a6// 自增1(先增1再赋值)> ++a7// 自减1(先减1再赋值)> --a6> a6//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理

2.4.2 比较运算符

> >= < <= != == === !==

// 大于> a > btrue// 大于等于> a >= btrue// 小于> a < bfalse// 小于等于> a <= bfalse// 弱不等于> a != btrue// 弱等于> 1 == \'1\'true// 强等于> 1 === \'1\'false// 强不等于> 1 !== \'1\'true/*JS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误*/

2.4.3 逻辑运算符

&& || !

&& 与|| or! 非

2.4.4 赋值运算符

= += -= *= /=

// 赋值> var x = 3// 加等于> x += 25// 减等于> x -= 14// 乘等于> x *= 28// 除等于> x /= 24

2.5 流程控制

2.5.1 if

1, if(条件){条件成立执行代码}> var x = 3> if (x > 2){console.log("OK")}OK2, if(条件){条件成立执行代码}else{条件不成立执行代码}> if (x > 4){console.log("OK")}else{"NO"}\'NO\'3, if(条件1){条件1成立执行代码}else if(条件2){条件2成立执行代码}else{上面条件都不成立执行代码}> if (x > 4){console.log("OK")}else if(x > 5){console.log("OK2")}else{console.log(\'Ha\')}Ha

2.5.2 switch

var day = new Date().getDay();switch (day) {case 0:console.log("Sunday");break;case 1:console.log("Monday");break;default:console.log("不在范围")}不在范围

注意:

switch

中的

case

子句通常都会加

break

语句,否则程序会继续执行后续

case

中的语句。

2.5.3 for

// for 循环for(起始值;循环条件;每次循环后执行的操作){for循环体代码}for (var i = 0; i<10; i++){console.log(i)}0123456789

2.5.4 while

// while 循环while(循环条件){循环体代码}> var i = 0> while(i<10){console.log(i)i++}0123456789

2.5.5 break和continue

// breakfor (var i = 0; i<10; i++){if (i == 5){break}console.log(i)}01234// continuefor (var i = 0; i<10; i++){if (i == 5){continue}console.log(i)}012346789

2.6 三元运算

> a6> b3//条件成立c为a的值,不成立c为b的值> var c = a > b ? a : b> c6// 三元运算可以嵌套

2.7 函数

1. 普通函数> function foo1(){console.log("Hi")}> foo1()Hi2. 带参数函数> function foo1(name){console.log("Hi",name)}> foo1("Hans")Hi Hans> var name = "Hello"> foo1(name)Hi Hello3. 带返回值函数> function foo1(a,b){return a + b}> foo1(1,2)3> var a = foo1(10,20)  //接受函数返回值> a304. 匿名函数> var sum = function(a, b){return a + b;}> sum(1,2)3// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱> (function(a, b){return a + b})(10, 20)305. 闭包函数// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数var city = "BJ"function f(){var city = "SH"function inner(){console.log(city)}return inner}var ret = f()ret()执行结果:SH

ES6中允许使用“箭头”(=>)定义函数。

var f = v => v;// 等同于var f = function(v){return v;}

arguments

参数 可以获取传入的所有数据

function foo1(a,b){console.log(arguments.length)  //参数的个数console.log(arguments[0]) // 第一个参数的值return a + b}foo1(10,20)结果:2 	 //参数的个数10	// 第一个参数的值30	// 返回相加的结果

**注意:**函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回

2.8 内置对象和方法

JavaScript

中的所有事物都是对象:字符串、数字、数组、日期等。在

JavaScript

中,对象是拥有属性和方法的数据。

2.8.1 Date对象

> var data_test = new Date()> data_testFri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)> data_test.toLocaleString()\'2022/2/11 下午9:44:43\'> data_test.toLocaleDateString()\'2022/2/11\'> var data_test2  = new Date("2022/2/11 9:44:43")> data_test2.toLocaleString()\'2022/2/11 上午9:44:43\'// 获取当前几号> data_test.getDate()11// 获取星期几,数字表示> data_test.getDay()5// 获取月份(0-11)> data_test.getMonth()1// 获取完整年份> data_test.getFullYear()2022// 获取时> data_test.getHours()21// 获取分> data_test.getMinutes()44// 获取秒> data_test.getSeconds()43// 获取毫秒> data_test.getMilliseconds()290// 获取时间戳> data_test.getTime()1644587083290

2.8.2 Json对象

JSON.stringify()  // 序列化, 把对象转换成JSON字符串JSON.parse()  // 反序列化,把JSON字符串转换成对象// 序列化> var jstojson = JSON.stringify(person)> jstojson\'{"Name":"Hans","Age":18}\'// 反序列化> var x = JSON.parse(jstojson)> x{Name: \'Hans\', Age: 18}> x.Age18

2.8.3 RegExp对象

正则

> var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");> reg1/^[a-zA-Z][a-zA-Z0-9]{4,7}/> reg1.test("Hans666")true> var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/> reg2/^[a-zA-Z][a-zA-Z0-9]{4,7}/> reg2.test(\'Hasdfa\')true全局匹配:> name\'Hello\'> name.match(/l/)[\'l\', index: 2, input: \'Hello\', groups: undefined]> name.match(/l/g)(2) [\'l\', \'l\']// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配全局匹配注意事项:> var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g> reg2.test(\'Hasdfa\')true>reg2.lastIndex;6> reg2.test(\'Hasdfa\')false> reg2.lastIndex;0> reg2.test(\'Hasdfa\')true> reg2.lastIndex;6> reg2.test(\'Hasdfa\')false> reg2.lastIndex;0// 全局匹配会有一个lastindex属性> reg2.test()false> reg2.test()true// 校验时不传参数默认传的是undefined

2.8.4 自定义对象

就相当于是

python

中的字典

> var person = {\'Name\':"Hans", "Age":18}> person{Name: \'Hans\', Age: 18}> person.Name\'Hans\'> person["Name"]\'Hans\'// 也可以使用new Object创建> var person2 = new Object()> person2.name = "Hello"\'Hello\'> person2.age = 2020

3. JavaScript BOM和DOM操作

BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。

DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。

3.1 window 对象

所有浏览器都支持 window 对象。它表示浏览器窗口。

//览器窗口的内部高度window.innerHeight706//浏览器窗口的内部宽度window.innerWidth1522// 打开新窗口window.open(\'https://www.baidu.com\')Window {window: Window, self: Window, document: document, name: \'\', location: Location, …}// 关闭当前窗口window.close()//  后退一页window.history.back()// 前进一页window.history.forward()//Web浏览器全称window.navigator.appName\'Netscape\'// Web浏览器厂商和版本的详细字符串window.navigator.appVersion\'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36\'// 客户端绝大部分信息window.navigator.userAgent\'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36\'// 浏览器运行所在的操作系统window.navigator.platform\'Win32\'//  获取URLwindow.location.href// 跳转到指定页面window.location.href=\'https://www.baidu.com\'// 重新加载页面window.location.reload()

3.2 弹出框

三种消息框:警告框、确认框、提示框。

3.2.1 警告框

alert("Hello")

3.2.2 确认框

> confirm("你确定吗?") // 点确认返回truetrue> confirm("你确定吗?")  // 点取消返回falsefalse

3.2.3 提示框

prompt("请输入","提示")

如果直接点

确定

后端得收到提示两个字,也可以删除输入自己想输入的内容、

如果直接点

取消

后端收到

null

3.3 计时相关

在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。

// 等于3秒钟弹窗setTimeout(function(){alert("Hello")}, 3000)var t = setTimeout(function(){alert("Hello")}, 3000)// 取消setTimeout设置clearTimeout(t)

setTimeout()

方法会返回某个值。在上面的语句中,值被储存在名为

t

的变量中。假如你希望取消这个

setTimeout()

,你可以使用这个变量名来指定它。

3.3.1 setInterval() 间隔指定的毫秒数不停地执行指定的代码

每三秒弹出 "hello" :setInterval(function(){alert("Hello")},3000);

取消使用

clearInterval()

方法.它用于停止

setInterval()

方法执行的函数代码。

var t = setInterval(function(){alert("Hello")},3000);//取消:clearInterval(t)
赞(0) 打赏
未经允许不得转载:爱站程序员基地 » 前端之JavaScript