JavaScript基础知识

1.js组成
1)ECMAscript

	ECMA为了同意浏览器对js的解释,特定了一个标准
	变量
	注释
	保留关键字
	操作符
	数据类型
	流程控制豫剧
	数组
	函数
	对象
	正则表达式

DOM(页面局部更新)

	文档对象模型
	浏览器厂商根据js的标准编写的操作html/css的库就叫做DOM

BOM(ajax)

	浏览器对象模型
	浏览器厂商利用js编写的操作浏览器的库
		超时调用,间歇调用
		本地存储
		ajax
		弹框
		location
		定位

2.注释
//当行注释
/*
多行注释
*/
3.变量
1)使用

声明
	var a; 			//通过var关键字声明一个变量,a为变量名
	a = 2; 			//初始化,第一次赋值
	var a = 2;
	console.log(a); //使用

2)弱类型

	java属于强类型语言
		int a;	//1.变量的类型在声明的时候确定
		a = 2;
		typeof a;  //
		a = true; //2.a为int类型,无法将Boolean类型的值赋值给a
		a = 3.5;
		typeof a;  //
	js属于弱类型语言
		var a;  //1.变量的类型在声明的时候无法确定
		a = 3;  //变量的类型在赋值的时候确定
		typeof a; //3.number
		a=true; //2.变量的类型可以通过赋值的不同而发生变化
		a = 4.5; 
		typeof a; //3.获取a的数据类型,number

3)奇葩的var

	1.可以在变量声明之前访问变量
		console.log(a); //执行结果为undefined;
		var a=3;
		var声明的变量会被提升,在执行环境中,执行代码之前,会将所有的var声明变量提升到所有代码执行之前
		var a;
		console.log(a);
		a = 3;
	2.变量可以重复声明
		var a = 3;
		console.log(a);
		var a = hello world;
		console.log(a);
		输出结果为
			3
			hello world
		因为var声明的变量会被提升
			var a;
			a = 3;
			console.log(a);
			a = hello world;
			console.log(a);
	3.没有局部作用域
		function foo(){
	        var a = 3;
	        if(true){
	          var b = 4;
	        }
	        console.log(b);
	    }
	    foo();
		输出结果
			5 
	4.es6的改进
		为了符合服务器编程的特点,提供了替代var的东西,即let。let与java、c常规服务器编程语言相似

		const与let类似,不同的是const用于声明常量,let用于声明变量

4.数据类型
1)基本数据类型[简单数据类型]

	number
		var a = 3;
		var a = 011;	//八进制
		var a = 0x11;  //十六进制
		var a = 3.2; 	
		var a = 'a'/2;		//NaN不是一个数字
		var a= 2/0;		//infinite
	Boolean
		var a = true;
		var a = false;
	string
		var a = 'hello world'
		var a = "hello world"
		var a = `hello world`
		反引号在使用的时候会保留回车
		var a = `
		hello
		world
		`
		输出结果:
		a: 
		hello 
		world

		react jsx (javascript + html)
		注意
			引号的嵌套是不同类型,除非是字符串拼接
			字符串拼接变量使用加号
				var name = "terry"
				var a = "hello" + name + "welcome"

	null
		空对象,目前为空,将来的某个时刻为对象
		typeof null //object
		var gf =null;
		console.log("a:",a); //输出结果为null
		console.log("a的数据类型:",typeof a);
	undefined
		var a; //a为undefined
		var a = undefined;

2)引用数据类型复杂数据类型
变量中实际保存的是值在堆中的引用地址
除了基本数据类型之外的其他数据类型都为引用数据类型
所有的引用数据类型的值都可以调用object、prototype

	object
		var a = {name:"terry",age:12,gender:"male"}
	function
	array
		var a = ["merry","lili","nana"]
	RegExp正则
		var = /\d{11}/ig

3)基本数据类型和引用数据类型在内存中的表现

	栈区:后进先出,栈区用来保存变量的值,如果变量是基本数据类型,变量的值保存在栈区;如果变量是引用数据类型,引用地址(指针)保存在栈区
	堆区:引用类型的值

5.操作符
1)算术运算符
一般用于数字之间的运算,但是也支持非数字类型的运算,非数字类型的先转换为数字类型,再进行运算

	+,+=
	-,-=
	*,*=
	%,%=
	/,/=	除(因为js为弱类型语句,所以为除;java有高精度,所以在java中为取整)
	=

2)逻辑运算符(短路运算符)
操作数可以为任意数据类型,并且返回值也可能是人任意数据类型

	&&
		esp1 && esp2
		esp1为true或者是可以转换为true,整个表达式的结果取决于exp2,返回esp2
		“hello” && “world” //结果为world
		esp1为false或者可以转换为false,整个表达式的结果已经确定,返回exp1
		null && true  //结果为null
	||
		esp1 || esp2
		esp1为true或者是可以转换为true,整个表达式的结果已经确定,直接返回esp1
		esp1为false或者可以转换为false,整个表达式的结果取决于exp2,返回esp2
	!
		!false    //true
		!“hello”	//false,先将hello转换为true
		!!“hello”  //true
		快速将其他类型的数据转换为布尔类型

3)比较运算符

	>
	<
	>=
	<=
	==,!=
		当两个操作为都为引用数据类型,比较的是引用地址
		不比较数据类型,直接比较值,如果两个值的数据类型不同,会先转化为相同类型的值再比较
	===,!==(推荐)
		当两个操作为都为引用数据类型,比较的是引用地址
		先比较数据类型,再比较值,如果数据类型不一致直接返回false,如果数据类型相同再来比较值

4)三目运算符

	esp1?esp2:esp3
	判断esp1是否为真,如果为真,返回exp2,否则返回exp3
	var age = 12;
	var msg = age > 16?"成年人":"未成年人"

5)位运算符

	原码、反码、补码
	&
		3 & 2
		3: 0000 0011
		2: 0000 0010
		0000 0011 
		& 
		0000 0010
		0000 0010
	|
		0000 0011 
		& 
		0000 0010  
		0000 0011
	^
		0000 0011 
		& 
		0000 0010 
		0000 0001

6)一元运算符

	+ 正
		+true //1
		可以通过这种方式快速将其他数据类型转换为数值类型
	- 负
		-true //1
		可以通过这种方式快速将其他数据类型转换为数值类型
	++	自增
		前置
		先自增,再参与其他运算
		后置
		先参与其他运算,再进行自增

		var a = 3;
		++a + a++ //8   
		/*
		执行过程
		++a 4 a为4
		a++ 3 a为3
		++a + a++为4+4=8
		a最后为5
		*/
	--	自减

7)拼接运算符

	“true” + 1   //“true1”
	undefined + 1 //“undefined1”
	任意数据类型的值与字符串相加都为字符串

6.类型检测

1.typeof
 	var a = 3;
 	typeof a;	//检测a的数据类型
2.isNaN(是非数值)
	isNaN(a);
	当a为NaN类型时返回true
3.isFinite(是非有限值)
	isFinite(a)
	当a为infinity类型时返回false

7.数据类型的转换

Number
	Number()		无法从字符串中解析数字,一般用于将字符串数字转化为数字
	parseInt(str[,flag])		从字符串中解析数字,整数,从前往后解析,直到遇到非数字字符
	flag	表示进制
	parseFloat()	从字符串中解析数字,小数
Boolean
	Boolean()
	一般会将null、undefined、0、“”、NaN等负面值转换为false
String
	String()
	a + ""   //任意的数据类型加上空字符串都会成为字符串类型

8.流程控制语句

1.分支
(1)if-else
	单分支
	if(esp1){	//遇见卖葡萄
		esp1 	//买葡萄
	}
	exp3 //回家
	当esp1为真,执行esp2,esp3始终执行

	双分支
	if(exp1){
		exp2
	}else{
		exp3
	}
	当exp1为真时,执行exp2,否则,执行exp3

	多分支
	if(exp1){
		exp2
	}else if(exp3){
		exp4
	}... else{
		exp
	}
	当exp1为真时,执行exp2;当exp1为假,单exp3为真时,执行exp4....如果在else之前全部为假,则执行exp
(2)switch-case
	switch(变量){
		case 常量1:
			exp1
			break;
		case 常量2:
			exp2
			break;
		...
		default
			exp
	}
2.循环
	要素:初始化条件,结束判定条件,迭代
	(1)for
	for(初始化条件;结束判定条件;迭代){
		循环体
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值