javascript学习

javascript

javascript是一门世界上最流行的脚本语言

作为一个合格的后端人员,必须要精通javascript

快速入门

引入javascript

<head>
 	<script>
        alert("hello world");
    </script>
    
 <head>
外部引入,必须成对出现
<script src="js/qj.js"</script>

不用显示定义type。默认就是javacript

<script type="text/javascript"></script>


基础语法

javascript严格区分大小写

定义变量 变量类型 变量名=变量值
<script>
	var num=1;
	var name="qiangjiang";
<script>

var报错变黄,建议let和const
条件控制
if (1>2){
	alert("true")
}
注释
/*

*/

<script>
	var score=70;
	if(score>60 && score<70){
		alart("60-70")
	}else if(score>70 && score<80){
		alart("70-80")
	}else{
		alert("othe")
	}
		
</script>


浏览器控制台的使用

在conole.log(sorce)在浏览器的控制台打印变量


[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bje616e9-1678093551327)(D:\桌面\typora\image-20220919082855830.png)]

conole : 控制台调试js代码
source:打断点
network:抓包
application:看cookies(饼干)


数据类型

变量

var

js不区分小数和整数:number

NAN  //不是一个数字
infinty  //无限大

字符串

'abc' "abc"

布尔值

逻辑运算

&&
||
!

比较运算符

=赋值
==等于(类型不一样,值一样会判断为true)
===绝对等于(类型一样,值一样)

浮点数:jin

null和undefined

null空 
undefined未定义

数组

java一系列相同类型的对象

js不用

对象

对像是大括号,数组是中括号
每个属性之间使用逗号隔开,最后一个不需要添加

//Person person = new Person(1,2,3,4)
var person ={
	name:"qinjiang";
	age:3;
	tags:['js','java','web','...']
}


调用,取对象的值

person.name
>"qinjiang"
person.age
>3

严格检查模式

'use strict' 必须写在js的第一行
严格检查模式,预防javascript因为随意性产生的一些问题,


局部变量建议用let
idea需要设置支持es6语法

数据类型

字符串

多行字符串

//tab上面

var msg=
	`hello
word
你好`

模板字符串

let name ="qinjiang";
lat age= 3;

let mag=`你好呀,${name}`

字符串长度

str.length

字符串的可变性,不可变

大小写转换

//注意这里是方法,不是属性
student.toUpperCase
student.toLowerCase

student.indexOf(“t”)

数组

Arragy可以包含任意的数据类型
var arr=[1,2,3,4,5]
//通过下标取值和赋值

长度
arr.length
如果给arr.length赋值,数组大小就会发生变化,如果赋值变小,元素就是丢死
indexOf,通过元素下标索引
slice()截取Array的一部分,返回一个新数组,类似string中的substring(常用)
push,pop
push压入到尾部
pop弹出尾部的一个元素

unshift(),shift()头部

排序(sort)
(3)['b','c','a']
arr.sort()
(3)['a','b'.'c']

元素反转reverse

arr.reverse
concat()
concat并没有修改数组,只会返回一个新的数组
连接符join
打印拼接数组,使用特定的字符串连接
多位数组

对象

若干个键值对

var 对象名={
	属性名:属性值,
	属性名:属性值,
	属性名:属性值

}
定义一个对象,它有四个属性

var person ={
	name:"kuang sheng",
	age:3,
	email:"3247238462",
	score:0

}

js中的对象,{…}表示一个对象,键值对描述属性xxxx:xxxx,多个属性之间用逗号隔开,最后一个属性不加逗号

对象赋值

person.name="qiangjiang"
"qingjiang"
person.name
"qingjaing"

使用一个不存在的对象属性,不会报错

undefind

动态的删减属性

通过delete删除对象的属性

delete person.name 

动态的添加,直接给新的属性添加

person.haha="haha"
"haha"
person

判断属性值是否在这个对象中

xxx in xxx

'age' in person

判断一个属性是否是这个对象自己拥有的hasOwnproperty

pe

流程控制

if判断

var age=3;
if (age>3){//第一个判断
	alert("haha");
}else if (age<5){//第二个判断
	alert("kuwa");	
}else{//否则
	alert("kuwa");
}

while循环,避免程序死循环

while(age<100){
	age=age+1;
	conso.log(age)
}
do{
	age=age+1;
	console.log(age)
}while(age<100)

for循环

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

forEach循环

var age =[123,123,123,123,123];
//函数
age.forEach(function(value)){
	consle.log(value)
}

for…in

//for(var index in object){}
for(var.num in age){
	if(age.hasownProperty(num)){
	console.log("纯在")
	console.log(age[num])
	}
}

map和set

map

//es6
  var map =new map(['tom,100'],['jack,90'])
  var name =map.get('tom');//通过key获取value
  map.set('admin',123456)
  console。log9(name)

set:无序不重复集合

var set =new Set(3,1,1,1);//set可以去除重复

函数

方法:对象(属性:方法)

函数

定义一个函数

​ 绝对值函数

function abs(x){
	if(x>=0){
		return x;
	}else{
		return -x;
	}

}

一旦执行到return代表函数结束,返回结果

如果没有执行return,函数执行完也会返回结果,结果是undefined

定义方法二

var abs =function(x){
	if(x>=0){
		return x;
	}else{
		return -x;
	}
}

function(x){…}这是一个匿名函数,但是可以把结果赋值给abs,用过abs就可以调用函数

调用函数

abs(10)//10
abs(-10)//10

参数问题,javascript可以传递任意个参数,也可以不传递参数

假如参数不存在,如何规避

var abs =function (x){
	//手动跑出异常来判断
	if(type x!=='number'){
	throw 'not a number';
	
	}if(x>=0){
		return x;
	}else{
		return -x;
	}
}
arguments

arguments是js免费赠送的给关键字

代表,传递进来的所有参数,是一个数组

var abs =function(x){
	console.log("x=>"+x);
	for (var i =0 ;i<arguments.length;i++){
	console.log(arguments[i]);
	
	}
	if(x>=0){
		return x;
		
	}else{
	return -x;
	}
}

问题,arguments包含所有的参数,我们有时候会想使用多月的参数来进行挂架操作,需要排除已有点参数

rest

es6引入的新特性,获取除了已经定义的参数以外的参数…

function.aaa(a,b,....rest){
	console.log("a=>+a");
	console.log("b=>+b");
	console.log(rest);
}

rest参数只能写在最后面,必须用…标识

变量的作用域

在js当中,var定义变量实际是有作用域的

假设在函数中声明,则在函数体外不可使用(非要想实现的话,可以研究一下闭包)

function qj(){
	var x= 1;
	x = x + 1;
	
}
x= x+2 //uncaught referencerror :x is not defined

如果两个函数使用了相同的变量名,只要在函数内部,就不会冲突

内部函数可以访问外部函数成员,反之则不行

假设,内部函数变量和外部函数的变量,重名!

function qj {
	var x =1 ;
	
	function qj2{
	
	var x='A'
	console.log("inner"+x);
	
	}
	console.log('outer'+x);
	qj2()

}

假设在javascript中,函数查找变量从自身函数开始,由内而外查找,假设外部存在这个同名的函数变量,则内部函数会屏蔽外部函数的变量。

提升变量是作用域

function qj {
	var x ="x" + y;
	console.log(x);
	var y ='y';
	
}

结果,xundefined

说明,js执行引擎,自动,提升了y的申明没,但是不会提升变量y的赋值

function qj2{
	var y;
	
	var x ="x"+y;
	console.log)(x)
	y = 'y';
}

这个是在javascript创建之初就有了的提醒,养成规范,所有点变量定义,都放在函数的头部不要乱放,便于代码维护

全局函数window

var x = ' xxx'
alert(x);
alert(window.x); //默认所以的全局变量,都会自动绑定在window对象下

alert()这个函数本身也是一个window变量

var x = 'xxx'

window.alert(x);

var old_alert=window.alert;

//old_alert(x);

window.alert=function(){

};
//发现alert()失效了
window.alert(123);

//恢复

window.alert=old_alert;
window.alert(456);

javascript实际上只有一个全局作用域,任何变量(函数也可以视为变量,假设没有在函数作用范围内找到,就会向外查找,如果在全局作用域没有找到,报错refrence)

规范

由于我们所有的全局变量都会绑定到我们的window上,如果不同的js文件,使用了相同的全局变量,冲突~>如何能够减少冲突?

//唯一全局变量
var kuangqpp={};

//定义全局变量
kuangapp.name='kuangshen';
kuangapp.add=function(a,b){
	return a+b;
}


把自己的代码全部放入自己定义的唯一空间名字中,降低全局命名冲突的问题

jquery

局部作用域let

es6 let关键字,解决局部作用域冲突问题

function aaa(){
	for(let i=0;i<100;i++){
		console.log(i)
		}
		console.log(i+1);//uncaught referenceError: i is not defined
}

建议都用let去定义局部作用域的变量

常量const

在es6之前,怎么定义常量,只有用全部大写字母的变量就是常量,建议不要修改这样的

在es6引入了常量关键字const

const PI= '3.14'
console .log(PI);
PI='123';//TypError;assigment to constant variable.
console.log(PI);

方法

定义方法

方法就是把函数放在对象的里面,对象只有两个东西:属性和方法

var kuangshen ={} 
	name:'qinjiang',
	bitrh:2020,
	//方法
	age:function(){
	//今年-出生的年
	var now =new Date().getFullYear();
	return now-this.bitrh;
	}
}


//属性

kuangshen.name
//方法,一定要带()
kuangshen.age()

this代表什么,拆开上面的代码

this是无法指向

内部对象

标准对象

typeof 123
"number"
typeof '123'
" string"
typeof true
"boolean"
typeof NaN
"number"
typeof []
"object"
typeof Math.abs
"function"
typeof undefined
"undefind"

Date

var now =new Date

json

json是什么
早期数据传输,习惯用xml文件
json是一种轻量级的书籍交换格式
bson

在javascript一切皆为对象,任何js支持的类型都可以用json来表示 number ,string…

对象{}
数组[]
所用的键值对都用key:value

json字符串和js对象的转换

var user ={
	name :"qinjiang",
	age:3,
	sex:'男'
}
//对象转化为json字符串{"name:qingjiang","age":3,"sex";"男"}
var jsonuser = JSON.stringify(user);

//json字符串转化为对象,参数为json字符串
var obj =JSON.parse('{"name":"qingjiang","age";3,"sex":"男"}')

ajax

原生的js写法,xhr异步请求

jquey封装好的方法$(“#name”).ajax(“”)

axios请求

面向对象编程

类:模板

对象:具体的实列

原型

class继承

class关键字是es6引入的

定义一个类,属性,方法

//定义一个学生类
class Student{
	
	constructor(name){
		this.name=name;
		
	}
	hello(){
		alert('hello')
	}
}

var xiaoming=new Student("xiaoming");

var xiaoming=new Student("xiaoming");
xiaoming.hello()

原型链

操作BOM对象

BOM浏览器对象模型

window
window代表浏览器窗口
window.alert(1)
underfined
window.innerHeight
258
window.innerwidth
919
//大家可以调整浏览器窗口试试
Navigator
Navigator,封装了浏览器信息

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-F499NbXM-1678093551329)(D:\桌面\typora\image-20221015201101555.png)]

大多数时候,我们不会使用nacigator对象,因为会被人为修改,不建议使用这些属性来判断和编写代码

screen
代表屏幕尺寸

screen.width
screen.height

location
代表当前页面的url信息

host:"www.baidu.con"
href:"http://www.baidu.com"
protocol:"https:"
reload:reload()//刷新页面
//设置新的地址
location.assign('https://blog.kuangstudy.com')
document
当前页面HTML DOM文档数
document.title
"百度一下,你就知道"
document.title="狂神说"
"狂神说"


获取具体的文档树节点
 <d1  id='app'>
 	<dt>java</dt>
 	<dd>javaSE</dd>
 	<dd>javaEE</dd>
 
 </d1>
 
 <script>
 var d1 =document:getElementById('app');
 </sctipt>

获取cookie

document.cookie
"__guid=111872281.88......."

劫持cookie原理

www.baidu.com

<script src="aa.js">
</script>
//恶意人员,获取你的cookie上传到他的服务器

服务器端可以设置cookie:httpOnly
history
代表浏览器的历史记录
history.back()//后退
history.forward()//前进

操作DOM对象

dom:文档对象模型

浏览器网页就是一个DOM树形结构

更新:更新dom节点

遍历dom节点:得到dom节点

删除:删除一个dom节点

添加:添加一个新的节点

要操作一个dom节点,就必须要先获得dom节点

//对应css选择器
var h1= document.getElementsByTagName('h1');

var p1=document.getElementById('p1');

var p2=documetn.getElementsByClassName('p2');

var father =document.getElementById('father');

var children=father.children;//获取父节点下所有子节点
//father.firstChild
//father.lastChild

这是原生代码,之后我们经量都是用jquery

更新节点

<div id="id1">

</div>

<script>
	var id1 =document.getElementById('id1')
</script>

操作文本

id1.innerText='456'修改文本的值
id1.innerHTML='<script>123</script>'可以解析HTML文本标签

操作js

id1.style.color='yellow';
id1.style.fiontSuiize='20px';
id1.style.padding='2em'

删除节点

删除节点的步骤:先获取父节点,在通过父节点删除自己

<script>
	var self = document.getElementByid('p1')
	var father =p1.parentElement;
	father.removeChild(self);
	
	//删除是一个动态过程
	father.removech(father.children[0])
	father.removech(father.children[1])
	father.removech(father.children[2])
</script>

注意:删除多个节点的时候,children是在时刻变化的,删除节点的时候一定要注意

插入节点
我们获得了某个Dom节点,假设这个dom节点是空的,我们通过innerhtml就可以增加一个元素了,但是这个dom节点一技能存在元素了,我们就不能这么干,因为会产生覆盖

追加

<script>
	var js=document.getElementById('js');
	var list= document.getElementById('list');
	list.appendChild(js)//追加到后面
</script>
创建一个新的标签
var newp =document.createElement('p')//创建一个p标签
newP.id='newp';
newP.innerText='Hello.kuangshen'

insertBrfore

操作表单(验证)

表单是什么,from dom树

文本框text

下拉框

单选框radio

多选框checkbox

隐藏框hidden

密码框password

<script>
	var input_text=document.getElementById('username');
	var boy_radio=document.getElementById('boy');
	var girl_radio =document.getElementById('girl');
	
	//得到输入框的值
	input_text.value
	//修改输入框的值
	input_text.value='123'
	
	//对于单选框,多选框等等固定的值,boy_radio.value只能取到当前的值boy_radio.checked;//查看返回的结果,是否为true,如果为true,则被选中girl-radio.checked=true;//赋值



</script>

提交表单(验证)

md5算法

jQuery

javascipt和jquery库

里面存在大量的javascript函数

获取jquery

在线cdn引入
 

公式重点

selector选择器就是css选择器

$(selector).action()
<script src="lib/jquery-3.4-1.js"></script>

<body>
	<a href="" id="test-jquery">点我<a>
</body>

<script>
	//选择器就是css的选择器
	$('#test-jquery').click(function(){
	alert('hell0.jquery');
	})

</script>

jquery选择器

原生js.选择器少,麻烦记不住


//标签document.getElementByTagName();
//id
document.getElementById();
//类
document.getElementsByClassNmane();

jquery

css中选择器全部都能用

标签选择器
$('p').click();
id选择器
$('#id1').click();
类选择器
$(.class1).click();

事件

鼠标事件,键盘事件,其他事件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6cBm0bgg-1678093551330)(D:\桌面\typora\image-20221017222443548.png)]

操作DOM

<ul id='test-ul'>
	<li class="js">javascript</li>
	<li name="python">python</li>
</ul>

<script>
	//document.getElementById('')
	$('#test-ul li[name=python]').test();
	$('#test-ul').html();
</script>

节点文本操作

$('$test-ul li[name=python]').text();//获取值

$('#test-ul li[name=python]').text('设置值');//设置值

$('#test-ul').html();//获得值

$('#test-ul').html('<strong>123</strong>');//设置值

css的操作

$('#test-ul li[name=python]').css({"color",red})

元素的显示和隐藏:本质display:none;

$('#test-ul li[name=python]').show()

$('#test-ul li[name=python]').hide()

ajax

$(selector).action()
<script src="lib/jquery-3.4-1.js"></script>

<body>
	<a href="" id="test-jquery">点我<a>
</body>

<script>
	//选择器就是css的选择器
	$('#test-jquery').click(function(){
	alert('hell0.jquery');
	})

</script>

jquery选择器

原生js.选择器少,麻烦记不住


//标签document.getElementByTagName();
//id
document.getElementById();
//类
document.getElementsByClassNmane();

jquery

css中选择器全部都能用

标签选择器
$('p').click();
id选择器
$('#id1').click();
类选择器
$(.class1).click();

事件

鼠标事件,键盘事件,其他事件

[外链图片转存中…(img-6cBm0bgg-1678093551330)]

操作DOM

<ul id='test-ul'>
	<li class="js">javascript</li>
	<li name="python">python</li>
</ul>

<script>
	//document.getElementById('')
	$('#test-ul li[name=python]').test();
	$('#test-ul').html();
</script>

节点文本操作

$('$test-ul li[name=python]').text();//获取值

$('#test-ul li[name=python]').text('设置值');//设置值

$('#test-ul').html();//获得值

$('#test-ul').html('<strong>123</strong>');//设置值

css的操作

$('#test-ul li[name=python]').css({"color",red})

元素的显示和隐藏:本质display:none;

$('#test-ul li[name=python]').show()

$('#test-ul li[name=python]').hide()

ajax

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值