看完这篇JavaScript工作中的问题迎刃而解

Posted 野生java研究僧

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了看完这篇JavaScript工作中的问题迎刃而解相关的知识,希望对你有一定的参考价值。

文章目录

1.javascript简介

1.1 JavaScript的起源

JavaScript诞生于1995年,它的出现主要是用于处理网页中的前端验证。所谓的前端验证,就是指检查用户输入的内容是否符合一定的规则。比如:用户名的长度,密码的长度,邮箱的格式等。但是,有的同学可能会有疑问,这些验证,后端不也可以进行验证吗?确实,后端程序的确可以进行这些验证,但你要清楚,在1995年那个年代,网速是非常慢的,向后端发送一个请求,浏览器很久才能得到响应,那这无疑是一种非常不好的用户体验。

为了解决前端验证的问题,当时的浏览器巨头NetScape(网景)公司就开发出一种脚本语言,起初命名为LiveScript,后来由于SUN公司的介入更名为了JavaScript。但是你要清楚,Java和JavaScript是没有什么关系的,只不过当时Java非常流行,为了蹭热度,才将LiveScript更名为JavaScript,它们的关系就像雷锋和雷峰塔的关系一样,没啥关系。

但是,浏览器开发商不止网景一家,还有一个大家都知道的公司,微软公司,它们的主打产品是IE(Internet Explorer)浏览器,当网景公司的Netscape Navigator浏览器推出JavaScript语言时,微软就急了啊,好家伙,人网景都推出了专门用于前端验证的语言,不仅大大减少了后端程序的压力,还提高了用户的体验。我微软这么大的公司不也得整一个,在1996年,微软公司在其最新的IE3浏览器中引入了自己对JavaScript的实现JScript。

于是在市面上存在两个版本的JavaScript,一个网景公司的JavaScript和微软的JScript,虽然当时浏览器的巨头是网景,但是网景的浏览器是收费的,虽然微软的IE浏览器在全球的市场份额远远不及网景,但是微软的拳头产品是Windows操作系统,每一个操作系统都自带一个IE浏览器并且免费,那么,未来的发展大家可能也想到了,网景让微软给干倒闭了,1998年11月,网景被美国在线(AOL)收购。

老大哥就是老大哥,为了抢先获得规则制定权,网景最先将JavaScript作为草案提交给欧洲计算机制造商协会,也就是ECMA组织,希望能将JavaScript做成行业标准,最终在网景、SUN以及微软等公司的参与下,由一众程序员和相关组织人员组成的第39技术委员会也就是TC39发布了ECMA-262标准,这个标准定义了名为ECMAScript的全新脚本语言,为啥又来了个ECMAScript?

因为Java是SUN的商标,SUN授权了NetScape可以叫JavaScript,但是ECMA没有SUN的授权就不能叫JavaScript,哪怕NetScape成员特别希望ECMA把它叫做JavaScript,但是ECMA也有成员并不希望这个标准就叫JavaScript,总之经过几轮磋商和博弈,ECMAScript这个名字就定下来。

1.2 JavaScript的组成

ECMAScript是一个标准,而这个标准需要由各个厂商去实现,不同的浏览器厂商对该标准会有不同的实现。

我们已经知道ECMAScript是JavaScript标准,所以一般情况下这两个词我们认为是一个意思。但是实际上JavaScript的含义却要更大一些。一个完整的JavaScript实现应该由以下三个部分构成:

1.3 JavaScript的特点

解释型语言

JavaScript是一门解释型语言,所谓解释型值语言是指不需要被编译为机器码在执行,而是直接执行。由于少了编译这一步骤,所以解释型语言开发起来尤为轻松,但是解释型语言运行较慢也是它的劣势。不过解释型语言中使用了JIT技术,使得运行速度得以改善。

动态语言

JavaScript是一门动态语言,所谓的动态语言可以暂时理解为在语言中的一切内容都是不确定的。比如一个变量,这一时刻是个整型,下一时刻可能会变成字符串了。当然这个问题我们以后再谈。不过在补充一句动态语言相比静态语言性能上要差一些,不过由于JavaScript中应用的JIT技术,所以JavaScript可能是运行速度最快的动态语言了。

类似于 C 和 Java 的语法结构

JavaScript的语法结构与C和Java很像,向for、if、while等语句和Java的基本上是一模一样的。所以有过C和Java基础的同学学习起来会轻松很多。不过JavaScript和与Java的关系也仅仅是看起来像而已。

基于原型的面向对象

JavaScript是一门面向对象的语言。啥是对象?下次聊。

Java也是一门面向对象的语言,但是与Java不同JavaScript是基于原型的面向对象。啥是原型?下次聊。

严格区分大小写

JavaScript是严格区分大小写的,也就是abc和Abc会被解析器认为是两个不同的东西。

1.4 JavaScript本使用方式

1.在HTML中在script标签中就可以编写JavaScript代码

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<script>
			alert("hello world")
		</script>
	</body>
</html>

2.在一个单独的js文件中也可以编写JavaScript代码,然后在HTML文件中使用script标签进行引用

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

1.5 JavaScript的输出方式

1.向页面输出内容

	<script>
		document.write("hello world")
		</script>

2.在控制台输出信息

	<script>
		    console.log("日志信息"); // 调试中经常使用
		    console.info("普通信息");
		    console.warn("警告信息");
		    console.error("错误信息");
		</script>

3.弹出框输出

		<script>
			 alert("温馨提示!")
		</script>

4.确认弹出框

<script>	// 点击确定返回true ,取消返回false
			if(confirm("是否要删除?"))
				document.write("删除成功")
			else
				document.write("取消删除")
			
		</script>

5.用户输入弹出框

		<script>
			// prompt(提示信息,用户输入的内容) 该函数返回用户输入的内容
			console.log(prompt('请输入姓名:','eg:admin'))
		</script>	

1.6 JavaScript注释

		<script>
		// 单行注释: 【注释内容不会被解析执行,只是用户描述代码的作用,单行注释只能注释一行的内容】
		
		/*
		 多行注释: 可以包含多行注释文本
		*/
		</script>

2.JavaScript的基本语法

2.1 变量命名的正确方式

所谓标识符,就是指给变量、函数、属性或函数的参数起名字。

标识符可以是按照下列格式规则组合起来的一或多个字符:

第一个字符必须是一个字母、下划线( _ )或一个美元符号( $ )。
其它字符可以是字母、下划线、美元符号或数字。
按照惯例,ECMAScript 标识符采用驼峰命名法。
标识符不能是关键字和保留字符。

**个人意见:**命名一定要规范,否则项目大了,命名不规范很难维护,不利于后期扩展,尽量和团队沟通达成一个规范,命名一定要见名知意。

保留字:

不建议使用的标识符:

正确命名的方式: 后面标注的变量和常量先忽略,后面在解释

	  <script>
		 // 单个单词: student,user,teacher 【变量】
		 // 多个单词:userName,userAge,userPassword 【变量】
		 // 单个单词:ERROR INFO 【常量】
		 // 多个单词:ERROR_INFO CLASS_NAME 【常量】
		</script>

2.2 变量的使用方式

什么是变量? 从名字上就可以看出,这是可以改变的一个量,也是某些值,赋值给了一个容器,然后给这个容器起了个名字,然后呢?这个容器啊,里面放的东西是可以随时改变的,你就可以把这个容器啊想像成一个变量。

1.声明变量:

		<script>
          var student; // 声明单个变量  
		 var username,password; // 【使用var关键字声明变量】 声明多个变量
		 let userAge,userEmail;  // 【使用let关键字声明变量】 声明多个变量
		 const USER_INFO,USER_PHONE; // 【使用const关键字声明常量】 
		</script>

**2.使用变量:**如果声明了变量,单没有赋值,那么该变量的值就是 undefined

		<script>
		 var username,password; // 【使用var关键字声明变量】
		 console.log(username,password)  //输出:  undefined undefined
		</script>

3.个变量重新赋值:

<script>
		 var username="admin",password="123456"; // 【使用var关键字声明变量】
		 console.log(username,password)  //输出:  undefined undefined
		 
		 // 给变量重新赋值
		  username="root"; 
		  password="456789"; 
		 console.log(username,password)  //输出:  undefined undefined
</script>

2.3 数据类型的分类

数据类型决定了一个数据的特征,比如:123和”123”,直观上看这两个数据都是123,但实际上前者是一个数字,而后者是一个字符串。

对于不同的数据类型我们在进行操作时会有很大的不同。

JavaScript中一共有5种基本数据类型:

  • 字符串型(String)
  • 数值型(Number)
  • 布尔型(Boolean)
  • undefined型(Undefined)
  • null型(Null)

这5种之外的类型都称为Object,所以总的来看JavaScript中共有六种数据类型

2.4 检测一个变量的数据类型

使用typeof操作符可以用来检查一个变量的数据类型。

		<script>
		 var studentName =1;
		 console.log( typeof studentName)  // 输出:number
		</script>

2.5 String

String用于表示一个字符序列,即字符串。字符串需要使用 单引号双引号 括起来。

<script>
			var studentName = "admin"
			var userName = 'root'
			console.log(typeof studentName)
			console.log(typeof userName)
		</script>

2.6 Number

Number 类型用来表示整数和浮点数,最常用的功能就是用来表示10进制的整数和浮点数。

Number表示的数字大小是有限的,如果超过了这个范围,则会返回 ±Infinity。

最大值:+1.7976931348623157e+308
最小值:-1.7976931348623157e+308
0以上的最小值:5e-324

特殊的数字:

Infinity:正无穷
-Infinity:负无穷
NaN:非法数字(Not A Number)

其它的进制:

二进制:0b 开头表示二进制,但是,并不是所有的浏览器都支持
八进制:0 开头表示八进制
十六进制:0x 开头表示十六进制

注意:使用typeof检查一个Number类型的数据时(包括NaN 和 Infinity),会返回"number"。

2.7 Boolean

布尔型也被称为逻辑值类型或者真假值类型。

布尔型只能够取真(true)和假(false)两种数值。除此以外, 其它的值都不被支持。

2.8 Undefined

Undefined 类型只有一个值,即特殊的 undefined。

在使用 var 声明变量但未对其加以初始化时,这个变量的值就是 undefined。

注意:使用typeof对没有初始化和没有声明的变量,会返回“undefined”。

2.9 Null

Null 类型是第二个只有一个值的数据类型,这个特殊的值是 null。

undefined值实际上是由null值衍生出来的,所以如果比较undefined和null是否相等,会返回true。

注意:从语义上看null表示的是一个空的对象,所以使用typeof检查null会返回一个Object。

3.0 强制类型转换

强制类型转换指将一个数据类型强制转换为其它的数据类型。一般是指,将其它的数据类型转换为String、Number、Boolean

转换为String类型

将其它数值转换为字符串有三种方式:toString()、String()、 拼串。

  • 方式一:调用被转换数据类型的toString()方法,该方法不会影响到原变量,它会将转换的结果返回,但是注意:null和undefined这两个值没有toString()方法,如果调用它们的方法,会报错。

  • 方式二:调用String()函数,并将被转换的数据作为参数传递给函数,使用String()函数做强制类型转换时,对于Number和Boolean实际上就是调用的toString()方法,但是对于null和undefined,就不会调用toString()方法,它会将 null 直接转换为 “null”,将 undefined 直接转换为 “undefined”。

  • 方式三:为任意的数据类型 + " " 推荐的方式

转换为Number类型

有三个函数可以把非数值转换为数值:Number()、parseInt() 和parseFloat()。Number()可以用来转换任意类型的数据,而后两者只能用于转换字符串。parseInt()只会将字符串转换为整数,而parseFloat()可以将字符串转换为浮点数。

有三个函数可以把非数值转换为数值:Number()、parseInt() 和parseFloat()。Number()可以用来转换任意类型的数据,而后两者只能用于转换字符串。parseInt()只会将字符串转换为整数,而parseFloat()可以将字符串转换为浮点数。

方式一:使用Number()函数

字符串 --> 数字
    如果是纯数字的字符串,则直接将其转换为数字
    如果字符串中有非数字的内容,则转换为NaN
    如果字符串是一个空串或者是一个全是空格的字符串,则转换为0
布尔 --> 数字
    true 转成 1
    false 转成 0
null --> 数字
    null 转成 0
undefined --> 数字
    undefined 转成 NaN

方式二:这种方式专门用来对付字符串,parseInt() 把一个字符串转换为一个整数

var a = "123";
a = parseInt(a);
console.log(a);
console.log(typeof a);

方式三:这种方式专门用来对付字符串,parseFloat() 把一个字符串转换为一个浮点数

var a = "123.456";
a = parseFloat(a);
console.log(a);
console.log(typeof a);

注意:如果对非String使用parseInt()或parseFloat(),它会先将其转换为String然后在操作

转换为Boolean类型

将其它的数据类型转换为Boolean,只能使用Boolean()函数。

使用Boolean()函数
    数字 —> 布尔
        除了0和NaN,其余的都是true
    字符串 —> 布尔
        除了空串,其余的都是true
    null和undefined都会转换为false
    对象也会转换为true

3.1 算术运算符

运算符也叫操作符,通过运算符可以对一个或多个值进行运算并获取运算结果。

算术运算符用于表达式计算

y=5,下面的表格解释了这些算术运算符:

运算符描述例子x 运算结果y 运算结果
+加法x=y+275
-减法x=y-235
*乘法x=y*2105
/除法x=y/22.55
%取模(求余数)x=y%215
++自增 [++在前,先自增再赋值,++在后选赋值再自增]x=++y66
- -自减 - -在前,先自减再赋值,- -在后选赋值再自减]x= y- -44

3.2 关系运算符

关系运算符在逻辑语句中使用,以测定变量或值是否相等。

x=5,下面的表格解释了比较运算符:

运算符描述比较返回值
>大于x>8false
<小于x<8true
>=大于或等于x>=8false
<=小于或等于x<=8true

3.3 赋值运算符

赋值运算符用于给 JavaScript 变量赋值。

x=10 和 y=5,下面的表格解释了赋值运算符:

运算符例子等同于运算结果
=x=yx=5
+=x+=yx=x+yx=15
-=x-=yx=x-yx=5
*=x*=yx=x*yx=50
/=x/=yx=x/yx=2
%=x%=yx=x%yx=0

3.4 逻辑运算符

逻辑运算符用于测定变量或值之间的逻辑。

给定 x=6 以及 y=3,下表解释了逻辑运算符:

运算符描述例子
&&and(x < 10 && y > 1) 为 true
||or(x5 || y5) 为 false
!not!(x==y) 为 true

&& 与:&&可以对符号两侧的值进行与运算并返回结果,运算规则如下:

两个值中只要有一个值为false,就返回false,只有两个值都为true时,才会返回true
JS中的“与”属于短路的与,如果第一个值为false,则不会检查第二个值
非布尔值时:如果两个都为true,则返回第二个值,如果两个值中有false,则返回靠前的false的值

|| 或:||可以对符号两侧的值进行或运算并返回结果,运算规则如下:

两个值中只要有一个true,就返回true,只有两个值都为false,才会返回false
JS中的“或”属于短路的或,如果第一个值为true,则不会检查第二个值
非布尔值时:如果两个都为false ,则返回第二个值,如果两个值中有true,则返回靠前的true的值

! 非:!可以用来对一个值进行非运算,所谓非运算就是对一个布尔值进行取反操作,true变false,false变true,运算规则如下:

如果对一个值进行两次取反,它不会变化
非布尔值时:先会将其转换为布尔值,然后再取反,所以我们可以利用该特点,来将一个其它的数据类型转换为布尔值,可以为一个任意数据类型取两次反,来将其转换为布尔值,原理和Boolean()函数一样

6.5 条件运算符

avaScript 还包含了基于某些条件对变量进行赋值的条件运算符。

语法: variablename=(condition)?value1:value2;

例子:

	<script>
			var userAge = 10;
			// 表达式为真返回?号后的值,未夹返回:号后的值,总结:真前假后
			console.log(userAge>=18 ? "成年":"未成年")
		</script>

6.7 逗号运算符

使用逗号可以在一条语句中执行多次操作。

比如:var num1=1, num2=2, num3=3;

使用逗号运算符分隔的语句会从左到右顺 序依次执行。

6.8 运算符优先级

运算符优先级由上到下依次减小,对于同级运算符,采用从左向右依次执行的方法。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8o3WYEGI-1656822319479)(C:%5CUsers%5C14823%5CDesktop%5Clearn-note%5Ctyproa-img%5C695dff6b3d3117760c6fba7c0b09895b.png)]

6.8 条件语句

我们先来了解下语句块的的概念:语句块就是多条语句,被 包裹起来的多条语句

			
				var userAge = 10;
				var userName = admin"";
				

条件语句是通过判断指定表达式的值来决定执行还是跳过某些语句,最基本的条件语句:

  • if…else
  • switch…case

if条件语句: 如果if后面只有一条语句可以省略 号

			var userAge = 10;
			if(userAge>=18)
				console.log("成年")
			
			

**if eles 条件语句 ** 如果else后面只有一条语句可以省略 号

			var userAge = 10;
			if(userAge>=18)
				console.log("成年")
			else
			
				console.log("未成年")
			

switch…case

switch…case是另一种流程控制语句。

switch语句更适用于多条分支使用同一条语句的情况

var today = prompt("请输星期几?","eg:1")
	switch (today) 
	    case 1:
	        console.log("星期一");
	        break;
	    case 2:
	        console.log("星期二");
	        break;
	    case 3:
	        console.log("星期三");
	        break;
	    case 4:
	        console.log("星期四");
	        break;
	    case 5:
	        console.log("星期五");
	        break;
	    case 6:
	        console.log("星期六");
	        break;
	    case 7:
	        console.log("星期日");
	        break;
	    default: // 当上面所有条件都不满足时走这里
	        console.log("输入错误");
	

6.9 循环语句

循环语句和条件语句一样,也是基本的控制语句,只要满足一定的条件将会一直执行,最基本的循环语句:

  • while
  • do…while
  • for

while

while语句是一个最基本的循环语句,while语句也被称为while循环

	var i = 1;
	while (i <= 10) 
	    console.log(i);
	    i++;
	

do…while

do…while和while非常类似,只不过它会在循环的尾部而不是顶部检查表达式的值,因此,do…while循环会至少执行一次。相比于while,do…while的使用情况并不 是很多。

			var i = 1;
			do 
				console.log(i);
				i++;
			 while (i <= 10);

for

for语句也是循环控制语句,我们也称它为for循环。大部分循环都会有一个计数器用以控制循环执行的次数, 计数器的三个关键操作是初始化、检测和更新。for语句 就将这三步操作明确为了语法的一部分。

for (var i = 1; i <= 10; i++) 
			    console.log(i);
			

跳转控制

  • break:结束最近的一次循环,可以在循环和switch语句中使用。
  • continue:结束本次循环,执行下一次循环,只能在循环中使用。

3.面向对象基础

3.1 声明对象

		  // 创建对象的第一种方式
			var object = new Object()
			object.name = "admin";

			// 创建对象的第二种方式
			var user = 
			user.name = "admin2"

3.2 给对象赋值


			var user = 
             // 给对象赋值的第一种方式
			user.name = "admin"
		    user['password'] = "root"	

// 创建对象的时候就开始赋值
function Person(name,age) 
	this.name = name;
	this.age = age;
	this.say = function() 
		alert(name + ':::' + age);
	

var person = new Person('张三', 24);
person.say();

3.3 删除对象属性

			// 声明一个对象并且赋值
			var user = name:"admin",password:"123456"
			// 删除对象的属性方式1
			delete user['name']
			// 删除对象的属性方式2
			delete user.password		

3.4 遍历一个对象的所有属性

	// 声明一个对象并且赋值
var user=userName:"admin",userAge:20,userEmai:"admin@qqq.com",userSex:"男"
		
		for(userkey in user)
			console.log(user[userkey])
		

3.4 访问一个对象的属性

var user=userName:"admin",userAge:20,userEmai:"admin@qqq.com",userSex:"男"
// 方式1:	
console.log(user.userName)
// 方式2:	
console.log(user['userName'])

3.5 数据类型梳理

基本数据类型

  • JavaScript中的变量可能包含两种不同数据类型的值:基本数据类型和引用数据类型。
  • JavaScript中一共有5种基本数据类型:String、Number、 Boolean、Undefined、Null。
  • 基本数据类型的值是无法修改的,是不可变的。
  • 基本数据类型的比较是值的比较,也就是只要两个变量的值相等,我们就认为这两个变量相等。

引用数据类型