前端JavaScript的简单学习
1:什么是javaScript:是一门世界上最流行的脚本语言(注意,java和javaScript没有关系),大概10天就开发的,一个合格的后端人员,必须精通javaScript。(ECMAScript可以理解成是javaScript的一个标准)
2:javaScript
(1)快速入门javaScript
<!--script:在里面写javaScript代码 --> <!-- <script>--> <!-- // alert表示弹出一个框--> <!-- alert("这是第一个javaScript程序");--> <!-- </script>--> <!--外部引入的方式,注意:Script必须是成对的出现,不能省略来写 --> <script src="js/a.js"></script>
(2)基本的语法
'use strict'; //1:正常的字符串使用单引号或者双引号包裹 console.log("a"); console.log('a'); //2:拼接字符串可以用``进行使用(局部变量建议用let) let msg = `hello world message ` let name = 'xst' let age = 3; console.log(`你好呀+${name}:+${age}`)//ES6的新语法 //3:字符串的长度(字符串定义后不可变,不能重新对某个字符串进行赋值) let student = 'student' console.log(student.length)//7 console.log(student[0])//s console.log(student.toUpperCase())//转换成大写STUDENT console.log(student.toLowerCase())//转换成小写 console.log(student.indexOf('t'))//1获取t出现的第一个索引位置 console.log(student.substring(1,3))//截取1,3的位置,包含1但是不包含3
(2)数组的详解
<script> 'use strict' let arr = [1,2,3,4,5] //1:注意,假如给arr的length赋值,数组的长度会改变(如果赋值的过小,元素会丢失) console.log(arr.length)//5 arr.length = 10; console.log(arr.length)//10 //2:常用的数组中的方法 console.log(arr.indexOf(2))//获取下标的索引1 console.log(arr.slice(1,2))//截取方法,截取位置1到2的数组返回一个新的数组 console.log(arr.slice(3))//从位置3开始截取 let newArr = [1,2,3,4,5,6] //3:数组尾部的操作 newArr.push(7,8,9,10)//向数组中的后面添加元素 console.log(newArr.pop())//弹出的尾部的一个元素,这里应该是10 console.log(newArr)//弹出之后重新打印将没有了 //4:数组头部的操作 newArr.unshift(1,2,3,4,5)//向头部添加元素 newArr.shift()//弹出头部的一个元素 //5:排序 newArr.sort() //6:反转 newArr.reverse() //7:拼接 let otherArray = ['a','b','c']; otherArray.concat([1,2,3,4])//返回一个新的数组['a','b','c',1,2,3,4] //8:拼接 let oneArr = [1,2,3] oneArr.join('-') console.log(oneArr);//'1-2-3' </script>
(3)对象的详解
<script> 'use strict' /*1:定义对象的格式(js中的对象一般用大括号) var object = { 属性名:属性值, 属性名:属性值, 属性名:属性值 } */ var obj = { name: 'xst', age: 12, school: '清华大学' } //对象的赋值的问题 obj.name = 'mm' console.log(obj.name)//mm //动态的删除的值 delete obj.name console.log(obj.name)//undefined //动态的添加值 obj.aa = 'aa' console.log(obj.aa) //判断这个属性值是否在这个对象中(xx in xxx)javaScript中所有的键都是字符串 console.log('aa' in obj)//true //判断这个对象中是否拥有这个属性 console.log(obj.hasOwnProperty('aa'))//true </script>
(4)流程控制:和java中的if else类似(不做过多的讲解)
(5)Map和Set集合(在ES6中的新特性)
'use strict' //ES6的新语法 //map: let map = new Map([['tom', 100], ['age', 99], ['haha', 98]]); console.log(map.get('tom'))//100 map.set('key', 11111) console.log(map.get('key'))//11111 //set:会自动去重 let set = new Set([3, 1, 12, 3, 123, 123]); set.delete(3)//删除set中3这个元素 set.add(9999)//添加9999到set中 set.has(1)//判断这个set是否包含1这个元素 //of 和in的区别 of是遍历每一个元素 in是遍历数组下标 for (let a of map) { console.log(a) } for (let a of set) { console.log(a) }
3:javaScript中的函数方法的定义
(1)函数的定义和试用
<script> /*1:函数的定义都是通过function来定义的(绝对值函数),一旦执行了return表示方法结束 如果函数没有执行return 也会返回 返回的值为NaN */ //定义方式1 function abs(x) { if (x >= 0) { return x } else { return -x } } console.log(abs(-10))//10 /* * 定义方式2:(两种定义方式的作用是一样的) */ var abs = function (x) { if (x >= 0) { return x } else { return -x } } //2:javaScript可以传任意的参数,也可以不传递参数 //手动定义异常 var abs = function (x) { //typeOf:判断变量的类型 if (typeof x !== "number") { throw "x不是一个number" } } //3:arguments是js免费赠予的一个关键字,代表传进来的参数,是一个数组 var a = function (x) { if (arguments.length === 1) { console.log("传进来了一个参数") } if (arguments.length === 2) { console.log("传进来了两个参数") } } //4:rest是ES6的新特性,获取除了已经定义的参数之外的所有参数(rest函数必须写在最后一个,必须用...) function m(a, b, ...rest) { console.log(a) console.log(b) console.log(rest.length) for (var i = 0; i < rest.length; i++) { console.log(rest[i]) } } m(1, 2, 3, 4, 5, 6, 7, 8,) </script>
(2)变量的作用域问题(var let const的区别)
<script> /* 1:var定义的变量是存在作用域的,假设在函数体里面中声明的,在函数体外面不可以使用, * (1)内部函数可以访问外部函数的成员变量 */ //2:变量的作用域问题 function xst() { var x = 'x' + y; console.log(x) var y = 'y'; }//结果xundefined:说明js执行引擎,自动提升了y的声明, 但是不会对y进行变量的赋值:所以所有的javaScript的变量定义发那个在头部 //3:全局变量 var z = '1' function method() { console.log(z);//1 } method(); console.log(z);//1 //4:全局对象window(所有的全局变量,都会绑定在window中) var x = 'x' alert(x) alert(window.x) //5:由于所有的全局变量都会绑定到window中,如果js文件中存在相同名称的全局变量就会产生冲突(如何解决) //唯一的变量 var xst = {} xst.name = 'xxxxx'; /*6:let关键字解决局部变量冲突的问题(ES6d的关键字)建议使用let关键字去定义局部作用域的变量 * 常量const,在ES6之前都是用全大写的定义常量,这种方式不科学 * 用const定义后的常量不能改变,它是一个只读变量(注意:const定义的数组和对象可改变) */ </script>
(3)方法
<script> //1:方法就是把函数放在对象中使用,对象中只有属性和方法 var xst = { name: 'aaa', birth: 2021, age: function () { //今年-出生年月 let nowYear = new Date().getFullYear(); return nowYear - this.birth; } } console.log(xst.age()); //2:this关键字,this是无法指向的,谁调用它,this就指向谁 //但是javaScript中的apply函数可以改变this指向问题 var getAge = function () { let nowYear = new Date().getFullYear(); return nowYear - this.birth; } getAge().apply(xst, [])//表示在调用这个getAge这个方法的时候,this的指向是xst,传的参数为空 </script>
(6)javaScript中常用的对象
1:typeOf(用来判断这个变量的类型)
typeof 123 'number' typeof '123' 'string' typeof NaN 'number' typeof [] 'object' typeof {} 'object'
2:年份
//年份 var now = new Date(); now.getFullYear()//获取当前年 now.getMonth()//获取当前月(外国的月份是从0-11,即中国的1月表示为0) now.getDay()//星期几 now.getDate()//获取当前日 now.getHours()//获取时 now.getMinutes()//获取秒 now.getTime()//获取时间戳,全世界统一,从1976-1-1 0:00:00到现在时间的毫秒数 new Date(now.getTime());//获取中国标准时间
3:JSON对象
<script> /*1:json是什么:json是一种轻量级的数据交换格式,简洁而清晰的层次结构使得json成为最理想的数据交换语言 * 在js中,万物皆为对象,任何js支持的json数据类型表示 * 格式:对象:{},数组:[],所有的键值对都用key-value的形式 * **/ let user = { name: 'xst', age: 3, sex: '男' } let jsonUser = JSON.stringify(user)//将对象转成json对象 console.log(user) console.log(jsonUser) let object = JSON.parse(jsonUser);//将json字符串转换为对象 console.log(object); </script>
4:javaScript中的原型继承
<script> var student = { name: 'xst', age: 1, run: function () { console.log(this.name + 'run....') } } var xiaoMing = { name: 'xiaoMing' } var xiaoMing = {...student}//student//这样表示xiaoMing的原型对象是Student xiaoMing.run() </script>
<script> //给student增加一个方法 //用ES6中引入的(注意class对象的首字母必须大写) class Student { constructor(name) { this.name = name } hello() { alert("这是hello语句") } } class SmallStudent extends Student { constructor(name, grade) { super(name) this.grade = grade; } MyMethod() { alert("我是个小学生") } } var xst = new Student("xst"); xst.hello(); var xiaoHong = new SmallStudent("小红"); xiaoHong.MyMethod(); </script>
5:javaScript中操作BOM节点(重点)
(1)什么是BOM:浏览器对象
(2)window对象,代表浏览器窗口
window.innerHeight 397 window.innerWidth 1707 window.outerHeight 1019 window.outerWidth 1707
(3)Navigator(封装了浏览器的信息)不常用
navigator.appName 'Netscape' navigator.userAgent 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36' navigator.platform 'Win32'
(4)screen(代表屏幕的尺寸)
screen.width 1707 screen.height 1067
(5)location(代表当前页面的url信息)
host: "new-tab-page"
href: "chrome://new-tab-page/"
location.reload()//刷新页面
location.assign('https://www.baidu.com/')//跳转到百度页面
(6)document代表当前页面,HTML,DOM对象
document.title
'百度一下,你就知道'
获取具体的文档树节点
<dl id="test"> <dt>java</dt> <dd>javaSE</dd> <dd>javaEE</dd> </dl> <script> var testParm = document.getElementById("test")//获取test节点 console.log(testParm) </script>
获取Cookie(document.cookie)这是不安全的,容易获取到
(7)history.back():网页的后退,histroy.forward():网页的前进
6:操作DOM对象(DOM:文档对象模型)
(1)获得DOM节点
<script> document.getElementsByTagName("h1")//标签选择器 document.getElementById("p1")//id选择器 document.getElementsByClassName("p2")//class选择器 var father = document.getElementById("father") var allChildren = father.children;//获取父节点的所有子节点 father.firstChild//获取第一个节点 father.lastChild//获取最后一个节点 </script>
(2)更新节点
<script> var h1 = document.getElementById("id1"); h1.innerText = '1234'//给div添加文本信息 h1.innerHTML = '<strong>1234</strong>'//加一个html 加粗的html h1.style.color = 'red' h1.style.fontSize = '20px'//操作样式节点 h1.style.padding = '20px' </script>
(3)删除节点
步骤:
1:先获取父节点
2:再通过父节点删除自己
<script> //获取到子节点 var p1 = document.getElementById('p1'); //获取到父节点 var father = document.getElementById('id1'); //通过父节点删除子节点 father.removeChild(p1) //注意:删除 多个节点的时候,children是时刻在变化的,不能通过节点的下标来删除 </script>
(4)创建和插入节点
1:如果我们获得了某个DOM节点,我们通过innerHTML就可以新增一个节点,但是如果这个DOM节点已经存在,会覆盖之前的节点,js中为了解决这个问题,通过追加的方式。
<script> var js = document.getElementById('p1') var div = document.getElementById('div') div.appendChild(js)//追加p1到div中 var newP = document.createElement('p')//创建一个p标签 newP.id = 'newP'//在新节点设置一个id选择器 newP.innerText = 'newP'//在p标签中加了一段文字 div.appendChild(newP)//追加newP到div标签中 //创建一个标签 var myscription = document.createElement('script') myscription.setAttribute('type', 'text/javascript')//设置标签的属性 var myStyle =document.createElement('style'); myStyle.setAttribute('type','text/css'); </script>
7:初识jquery以及公式
(1)JavaScript和kjquery的关系:jquery是一个库,里面存在大量的jquery的函数
<!--引入jquery--> <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script> <body> <!--jquery的公式:$(选择器).action()--> <a href="" id="test">点我</a> <script> //jQuery中的选择器就是css中的选择器 $('#test').click(function () { alert('Hello,Jquery') }) </script>