前端学习之JS

本文详细介绍了JavaScript的基础知识,包括JS的起源、特点、语法、数据类型、流程控制、对象、函数和内置对象等内容。JavaScript是一种广泛使用的脚本语言,主要用于向网页添加交互性。文中通过实例讲解了如何引入JavaScript、变量定义、数据类型如number、字符串、数组、对象,以及如何处理DOM和BOM对象。此外,还提到了JavaScript的严格检查模式和面向对象编程的概念。
摘要由CSDN通过智能技术生成

JavaScript简介

JavaScript概述

JavaScript简称JS,是一种具有函数优先的轻量级,解释型或即时编译型的编程语言,它是一门世界上最流行的脚本语言。

JavaScript在1995年由Netscape公司的Brendan Eich,在网景导航者浏览器上首次设计实现而成。因为Netscape与Sun合作,Netscape管理层希望它外观看起来像Java,因此取名为JavaScript。

JavaScript的标准是ECMAScript,截至2012年,所有浏览器都完整地支持ECMAScript5.1。2015年6月17日,ECMA国际组织发布了ECMAScript的第六版,该版本正式成为ECMAScript2015,但通常称其为ECMAScript6或者ES6。

JavaScript由三部分组成:ECMAScript,文档对象模型,浏览器对象模型。

ECMAScript描述了该语言的语法和基本对象。

文档对象模型(DOM),描述处理网页内容的方法和接口。

浏览器对象模型(BOM),描述与浏览器进行交互的方法和接口。

JavaScript特点

JavaScript是一种属于网络的脚本语言,已被广泛用于进行web应用开发。常用来为网页添加各式各样的动态功能,为用户提供更流畅美观的浏览效果。通常JavaScript是通过嵌入在HTML中来实现自身功能。

主要特点有:

  • JavaScript是一种解释型脚本语言
  • 主要用来向HTML页面添加交互行为
  • 可以直接嵌入HTML页面,但写成独立的js文件有利于结构和行为的分离
  • 跨平台性
  • JavaScript同其他语言一样,有其自身的基本数据类型、表达式和算术运算符以及程序的基本程序框架

入门

JavaScript的引入

在HTML中引入JavaScript有以下两种方式。

  • 通过内部标签
  • 外部引入

内部标签

<script>
    // js代码
</script>

外部引入:将js文件导入到HTML中,src中是js的路径。

<script src="xxx.js"></script>

基本语法

JavaScript是严格区分大小写的。

我们一般是在浏览器里进行代码的调试。如图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zJ7M7s9y-1581070780316)(C:\Users\len\AppData\Roaming\Typora\typora-user-images\1578550932599.png)]

可以使用console.log()在浏览器的控制台打印变量。

数据类型

变量

在JavaScript中,不管是什么类型的变量,都是使用var来定义的。但在ES6之后建议使用let来定义变量。

var a = 123;
number

在JavaScript中不区分小数和整数,都是number。

111   // 整数111
11.23  // 浮点数 11.23
1.11e3  // 科学计数法表示
-22    // 负数
NaN    // not a number
Infinity   // 表示无限大
字符串

字符串可以用单引号包裹,也可以使用双引号包裹。

'hello'
"javascript"
布尔值

布尔值就两个:true和false。

逻辑运算
&&    // 短路与   两个为真,则结果为真
||    // 短路或   一个为真,则结果为真
!     // 非   真即假,假即真
比较运算符
=    // 表示赋值
==   // 等于,类型不一样,值一样,则也会被判断为true
===  // 绝对等于,类型一样,值一样,结才为true

在JavaScript中,进行判断的时候,不要使用==,需要使用===来进行比较。

注意

  • NaN === NaN,NaN与所有的数值都不相等,包括自己。
  • 我们只能通过isNaN(NaN)来判断这个数是否是NaN。

浮点数问题

使用 console.log((1/3) === (1-2/3)),打印出的结果是false。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cI3GeHLi-1581070780318)(C:\Users\len\AppData\Roaming\Typora\typora-user-images\1578552787586.png)]

这个结果与我们预期的不一样,这是因为浮点数在进行运算的时候,会存在精度的问题。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UlX0rdG4-1581070780318)(C:\Users\len\AppData\Roaming\Typora\typora-user-images\1578552970162.png)]

所以要尽量避免使用浮点数进行计算。可以使用比较两数相减的绝对值是否小于某个数来解决问题。如

Math.abs((1/3)-(1-2/3))<0.0000000001;
null和undefined

null代表空。

undefined代表未定义。

数组

在Java中数组的中的元素必须是相同类型,但是在JavaScript中数组的元素可以是不同的类型。

var array = [1,2,3,'javascript',true,null];

也可以使用 new 关键字来创建数组。

new Array(1,2,3,"javascript",false);

在JavaScript中一般不会报错,如果数组下标越界则会报 undefined。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tm4uXZY4-1581070780318)(C:\Users\len\AppData\Roaming\Typora\typora-user-images\1578556486351.png)]

对象

使用大括号,将对象的属性包裹。

每个属性之间需要用逗号隔开,最后一个不需要添加逗号。

var person = {
   name: 'xx', age: 10, gender: 'female'};

取对象的值,使用 对象名.属性。

> person.name
< "xx"
>person.age
< 10
> person.gender
< "female"

严格检查格式

在代码的第一行加上 ‘use strict’; 就表示是严格检查模式。这样做的好处是可以预防由于JavaScript的随意性导致的一些问题。

使用严格检查模式的前提是IEDA需要设置支持ES6语法。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AsNnc4Kx-1581070780319)(C:\Users\len\AppData\Roaming\Typora\typora-user-images\1578574834101.png)]

<script>
    'use strict';
    let a = 1;
</script>

局部变量建议使用let进行定义。

数据类型

字符串

1、正常的字符串一般使用单引号( ‘’ )或者双引号( “” )包裹。

2、转义字符则需要加上 \

\'    // 单引号
\"    // 双引号
\n    // 换行
\t    // 制表符
\u4e2d   // Unicode字符    \uxxxx
\x41     // Ascll字符      

3、多行字符串

// 使用Tab键上面的符号将字符串包裹起来
var str = `
hello
javascript
`

4、模板字符串

在java中,可以使用字符串拼接符进行字符串的拼接。在JavaScript中,可以使用${}进行拼接,此时需要使用Tab键上面的符号将字符串包裹起来。

let name = 'xx';
let age = 5;

let str = `hello,${
     name}`;

5、字符串长度

字符串是有长度的,可以使用 字符串名.length 来得到字符串的长度。

同java,字符串是不可变的

6、大小写转换

进行字符串的大小写转换时,需要调用方法。需要注意的是字符串本身没改变,调用方法后返回了进行转换后新的字符串。

string.toUpperCase()    // 转为大写
string.toLowerCase()    // 转为小写

7、索引

可以通过 indexOf() 方法得到某个字符的索引。

string.indexOf('x');

8、子字符串

可以通过 substring() 方法截取字符串。

string.substring(0)   // 从第一个字符截取到最后一个字符
string.substring(1,6) // 从下标为1的字符开始,截取到下标为6的字符,但不包含下标为6的字符,即含头不含尾

数组

不同于java,JavaScript中的数组可以存放任意数据类型的元素。

1、数组长度

可以通过 数组名.length 获取数组的长度。

var arr = [1,2,'abc',true];
var len = arr.length;

需要注意的是,可以给 arr.length 赋值,此时数组大小就会发生变化。如果赋的值比原本的数组长度大,那么增加的元素为空;如果赋的值比原本的数组长度小,那么就会产生数组元素丢失的情况。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TnxNeqlS-1581070780320)(C:\Users\len\AppData\Roaming\Typora\typora-user-images\1578560931732.png)]

2、数组下标索引

可以通过 indexOf() 通过元素获取下标索引。

arr.indexOf(1)

注意:数字1和字符串’1’是不同的。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Y2WeHnYP-1581070780320)(C:\Users\len\AppData\Roaming\Typora\typora-user-images\1578561177698.png)]

3、切片

我们可以通过 slice() 截取数组的一部分,该方法返回一个新的数组,不改变原数组。该方法类似于字符串中的substring() 方法。

arr.slice(2)      // 从下标为2开始截取到最后一个元素
arr.slice(1,3)    // 从下标为1开始截取到下标为3,得到的新数组中包含下标为1的元素,但不包含下标为3的元素,即含头不含尾

4、尾部操作数组 push() pop()

在数组的尾部操作数组,可以使用push(),pop()方法。

push(): 将元素压入到尾部
pop():  弹出尾部的一个元素

5、头部操作数组 unshift() shift()

在数组的头部操作数组,可以使用unshift(),shift() 方法。

unshift(): 将元素压入到头部
shift():   弹出头部的一个元素

6、数组排序 sort()

可以使用sort() 方法对数组进行排序。

arr.sort()

7、数组元素反转 reverse()

可以使用reverse()方法对数组元素进行反转。

arr.reverse()

8、数组的拼接

使用concat() 方法进行数组的拼接。该方法并没有修改数组,只是返回一个新的数组。

arr.concat([11,22,33])

9、连接符join

在打印拼接数组的时候,可以使用特定的字符串进行连接

arr.join('-')

10、多维数组

这里以二维数组为例:

arr = [[2,1],['5','6'],[true,false];

对象

对象是由若干个键值对构成的。

var 对象名 = {
   
    属性名1:属性值,
    属性名2:属性值,
    属性名3:属性值
}

举例:

var person = {
   
    name:'zhangsan',
    age:10,
    gender:'male'
}

在JavaScript中,{…}表示一个对象,键值对用于描述属性 xxx : xxx,多个属性之间用逗号隔开,最后一个属性不用加逗号。

JavaScript中所有的键都是字符串,值是任意对象。

1、对象赋值

person.name = 'lisi';    // 该语句时对对象中的name属性进行赋值操作

2、使用一个不存在的对象属性,程序不会报错,结果是undefined。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nSpHn2wN-1581070780320)(C:\Users\len\AppData\Roaming\Typora\typora-user-images\1578570930206.png)]

3、动态删减属性

可以通过delete动态删除对象的属性。若删除成功则返回true,否则返回false。

delete person.age

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9cemyUu0-1581070780321)(C:\Users\len\AppData\Roaming\Typora\typora-user-images\1578571061023.png)]

4、动态添加属性

直接给新的属性添加值就可以完成动态添加属性的操作。

person.score = 90

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9l7MDTMM-1581070780321)(C:\Users\len\AppData\Roaming\Typora\typora-user-images\1578571210990.png)]

5、判断属性是否在对象中

使用 in 关键字判断。返回结果为true或false。

// 由于JavaScript中的键都是字符串,所以判断的时候,需要给属性名加上单引号或双引号
'age' in person
'toString' in person   // person对象继承了Object,所以person对象有toString

6、判断一个属性是否是这个对象自身拥有的

使用 hasOwnProperty() 进行判断。

person.hasOwnProperty('toString')   // 结果为false
person.hasOwnProperty('age')        // 结果为true

流程控制

JavaScript中的流程语句的使用和java差不多。

1、if语句

var score = 80;
if (score > 60 && score <75){
   
    alert('及格');
}else if(num >= 75 && num >85){
   
    alert('良好')
}else{
   
    alert('优秀')
}

2、while循环 需要注意的是避免死循环

var i = 1;
while(i < 50){
   
    i = i + 1;
    console.log(i)
}

3、do-while循环

var i = 1;
do {
   
    i = i + 1;
    console.log(i)
}

4、for循环

for (var i = 0; i < 100; i++) {
   
        console.log(i)
}

5、foreach循环

var arr = [1,2,3,4,5,6,7,8,9];

arr.forEach(function (value) {
   
    console.log(value)
})

6、for…in

var arr = [1,2,3,4,5,6,7,8,9];

// for(var index in array){}
for (var num in arr){
         // num表示的是下标
    console.log(arr[num])
}

Map和Set

Map 和 Set是ES6的新特性。

1、Map

var map = new Map([['Tom',80],['Jack',90],['Kim',85]]);   // [键,值]
var name = map.get('Tom');   // 通过键获取值
map.set('admin',123)         // 使用set()方法添加新的键值对,或者进行修改
map.delete("Jack")           // 使用delete()方法删除键值对

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sPtPaXjR-1581070780322)(C:\Users\len\AppData\Roaming\Typora\typora-user-images\1578575205147.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ldoYnyRG-1581070780323)(C:\Users\len\AppData\Roaming\Typora\typora-user-images\1578575235938.png)]

2、Set

Set是无序且不重复的集合

var set = new Set([1,2,3,5,3,2,4
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值