JavaScript基础02
内部对象
标准对象
typeof 233
'number'
typeof '233'
'string'
typeof true
'boolean'
typeof NaN
'number'
typeof []
'object'
typeof {}
'object'
typeof Math.abs
'function'
typeof undefined
'undefined'
Date
基本使用
'use strict'
var nowTime = new Date(); //Thu May 16 2024 13:26:03 GMT+0800 (中国标准时间)
nowTime.getFullYear();
nowTime.getMonth();
nowTime.getDate();
nowTime.getHours();
nowTime.getMinutes();
nowTime.getSeconds();
nowTime.getDay(); // 星期几
nowTime.getTime() // 获得时间戳 全世界统一 1970-01-01 00:00:00 到现在时间的毫秒数
console.log(new Date(1715837163650)); // 时间戳转为时间
转化
console.log(nowTime)
Thu May 16 2024 13:40:51 GMT+0800 (中国标准时间)
nowTime.toLocaleString()
'2024/5/16 13:40:51'
nowTime.toGMTString()
'Thu, 16 May 2024 05:40:51 GMT'
JSON
JSON是什么?
早期, 所有数据传输习惯使用XML文件
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式
层次结构简洁清晰
易于阅读并提升网络传输效率
在JavaScript中 一切皆为对象, 任何 js 支持的数据类型都可以使用JSON来表示 --> number, string...标准对象
格式
- 对象都用{}
- 数组都用[]
- 所有的键值对 都是用 key : value
JSON字符串 和 JavaScript对象的转化
var user = {
name: 'frank',
age: 3,
sex: '男'
}
// 对象转化为JSON字符串 --> {"name":"frank","age":3,"sex":"男"}
var jsonUser = JSON.stringify(user);
// JSON字符串转化为对象 --> 参数为JSON字符串 其中单引号双引号要岔开
var obj = JSON.parse('{"name":"frank","age":3,"sex":"男"}');
JSON字符串 和 JavaScript对象的区别
var obj = {a : 'helloA', b : 'helloB'};
var JSON = '{"a" : "helloA", "b" : "helloB"}';
Ajax
- 原生的js写法 xhr 异步请求
- jQuey 封装好的方法 $("#name").ajax("")
- axios 请求
面向对象编程
原型对象
JavaScript, Java, c# ...都是面向对象的语言. JavaScript有一些区别
- 类: 模板 --> 原型对象
- 对象: 具体的实例
在Javascript中, 需要转换思维
var student = {
name: '小刘',
age: 21,
run: function () {
console.log(this.name + "正在操场跑圈中...")
}
}
var xiaoMing = {
name: 'xiaoMing'
}
//原型对象
xiaoMing.__proto__ = student;
var bird = {
fly: function () {
console.log(this.name + "正在天上飞...")
}
}
// 小明的原型是 bird
xiaoMing.__proto__ = bird;
//ES6 之前
function student(name) {
this.name = name;
}
// 给student新增一个方法
student.prototype.hello = function () {
alert('hello')
};
class 继承
class关键字是在ES6 引入的
1 定义一个类. 有属性 和 方法
// 直接定义一个学生的类
class Student {
constructor(name) {
this.name = name;
}
hello(){
alert('hello')l
}
}
var xiaoMing = new Student('xiaoMing');
var xiaoHua = new Student('xiaoHua');
2 继承
class Student {
constructor(name) {
this.name = name;
}
hello(){
alert('hello');
}
}
class BigStudent extends Student{
constructor(name,grade) {
super(name);
this.grade = grade;
}
myGrade(){
alert('我正在上大学二年级')
}
}
var xiaoMing = new Student('xiaoMing');
var xiaoHua = new BigStudent('xiaoHua',2);
本质: 查看对象原型 -->
原型链
__ proto __ :
原型 与 原型链 -->
操作BOM对象 --> 重点
浏览器介绍
JavaScript 和 浏览器 的关系?
JavaScript诞生就是为了能够让它在浏览器中运行
BOM --> browser object model 浏览器对象模型
浏览器内核 -->
- IE 6 - 12
- Chrome
- Safari
- FireFox
第三方 软件浏览器 -->
- QQ 浏览器
- 360
window --> 重要
window 代表 浏览器窗口
window.alert(2333)
undefined
window.innerHeight
267
window.innerWidth
1699
window.outerHeight
1019
window.outerWidth
1707
Navigator
Navigator, 封装了浏览器的信息
navigator.appName
'Netscape'
navigator.appVersion
'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 Edg/124.0.0.0'
navigator.userAgent
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 Edg/124.0.0.0'
navigator.platform
'Win32'
大多数时候,我们不会受用navigator对象, 因为会被 人为修改
screen
代表屏幕尺寸
screen.height
1067 px
screen.width
1707 px
location --> 重要
location 代表当前页面URL信息
host: "www.baidu.com"
href: "https://www.baidu.com/?index.html"
protocol: "https:"
reload: ƒ reload() //重新加载 即 刷新网页
//设置新的地址 --> 搜索原来的网址后,跳转到新的网址
location.assign('https://blog.kuangstudy.com/');
location.assign('https://cn.bing.com/')
document
document 代表当前的页面 HTML DOM文档树
document.title
"百度一下, 你就知道"
document.title = "小刘学Java"
"小刘学Java"
获取具体的文档树节点
<body>
<dl id="app">
<dt>Java</dt>
<dd>JavaSE</dd>
<dd>JavaEE</dd>
</dl>
<script>
var dl = document.getElementById('app');
</script>
</body>
获取cookie
在百度浏览器上 -->
document.cookie
'BIDUPSID=A152B9AF0068A366DB2994FD48C7CBFC; PSTM=1667303082; __bid_n=1844633a6f2e8bcf014207; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%223921311117%22%2C%22first_id%22%3A%221887a680cebfa8-06b42f32bd61f1-7b515473-1821369-1887a680cec20a5%22%2C%22props%22%3A%7B%7D%2C%22%24device_id%22%3A%221887a680cebfa8-06b42f32bd61f1-7b515473-1821369-1887a680cec20a5%22%7D; FPTOKEN=yxI4CwEjbGyVDXPdzhYJlm/cdZXRiRyMQEnSWz3/eVvCnWuZDielFvvmWKtdlUd33ZxL9wkz2DQs1yn92w0sRU4cg4pVRtMAYUOCL6q7WxioQvCbcNtb69ySqCvgN1ibsOfxRqyHC9rfNiYwg4tSjqzjdnWPrZMAMDn82K9eCHdZAO+XfNFIex3eyYXHHUlHhMA5Nhqlwi9SRxmv/e5j1SnM5sqWNdVMoUMDa8vr573CXrig1ZI+FawCWLcaIbRu7FAykxyH9TSL0VVTMi31GKFXRmcgVeUMpm4hqR1nGvwTwgZUiIhqh/H0q3rLkLApuVTyOsxdEf6MRWnpI0HxfiyHHRoODOtixvoYjl5Zev9ia/Zw9iNdakLKltGmZCUgL6lCPz0sFhUZWSUNBPzUeg==|+EP20lYVOJ4aRbNsQDXgGtXl23O6SKX+dE7LrncD/Qs=|10|39962cc56665be6cfcc5577c1a8bbaed; BAIDU_WISE_UID=wapp_1696928356840_937; COOKIE_SESSION=3237597_2_1_2_4_0_1_0_1_0_0_0_3237597_7936913_17_0_1698841078_1693622853_1698841061%7C7%237936913_2_1693622849%7C2; ZFY=NmVUOwyk:Au:B7e5UR6k72ccxMAt:ArxXjeI1ss:ApOHEaM:C; BAIDUID=295372796A294D71AF82E242CC5A616D:SL=0:NR=10:FG=1; BAIDUID_BFESS=295372796A294D71AF82E242CC5A616D:SL=0:NR=10:FG=1; sug=3; sugstore=0; ORIGIN=2; bdime=0; BD_UPN=12314753; H_PS_PSSID=60126_60269_60282_60289; BA_HECTOR=252g052k050g200420a080ahdfjicn1j4b3jm1u'
劫持cookie原理
www.taobao.com
<script src = 'aaa.js'></script>
<!--恶意人员: 获取你的cookie上传到他的服务器-->
服务器端可以设置 cookie: httpOnly
history
history 代表浏览器的历史记录
history.back() //后退
history.forward() //前进
操作DOM对象 --> 重要
整个HTML就是一颗树 ! 根节点 --> html
DOM: 文档对象模型
核心
浏览器网页就是一个Dom 树形结构
- 更新: 更新Dom节点
- 遍历: 遍历Dom节点, 得到Dom节点
- 删除: 删除一个Dom节点
- 添加: 添加一个Dom节点
要操作一个Dom节点, 就必须先获得这个Dom节点
获得dom节点
<body>
<div id="father">
<h1>标题一 --> 小刘正在学Java</h1>
<p id="p1">不知道吃什么</p>
<p class="p2">吃烤肉</p>
</div>
<script>
// 对应 css 选择器
var h1 = document.getElementsByTagName('h1');
var p1 = document.getElementById('p1');
var p2 = document.getElementsByClassName('p2');
var father = document.getElementById('father');
var children = father.children; // 获取父节点下的所有子节点
console.log(father.firstChild);
console.log(father.lastChild);
</script>
</body>
这是原生代码, 之后我们尽量都是用jQuery();
更新dom节点
<div id="id01">
</div>
<script>
var id01 = document.getElementById('id01');
</script>
操作文本 -->
id01.innerText = '123' 修改文本的值
id01.innerHTML = '123' 可以解析HTML文本标签
操作 css -->
id01.style.color = 'yellowgreen' // 属性 使用 '' 包裹
id01.style.fontSize = '100px' //css 中的格式在 JavaScript中 要把_ 转给驼峰命名
id01.style.padding = '2em'
document.getElementById('su')
<input type="submit" value="百度一下" id="su" class="btn self-btn bg s_btn" style="color: yellowgreen; padding: 10px;">
var ss = document.getElementById('su')
undefined
ss.style.color = 'yellowgreen'
'yellowgreen'
ss.style.padding = '10px'
'10px'
删除dom节点
<script>
// 对应 css 选择器
var h1 = document.getElementsByTagName('h1');
var p1 = document.getElementById('p1');
var p2 = document.getElementsByClassName('p2');
var father = document.getElementById('father');
var children = father.children; // 获取父节点下的所有子节点
console.log(father.firstChild);
console.log(father.lastChild);
</script>
father.removeChild(p1)
删除节点的步骤 --> 先获取父节点, 再通过父节点删除自己 => 逻辑上不能自己删除自己
<div id="father">
<h1>标题一 --> 小刘正在学Java</h1>
<p id="p1">不知道吃什么</p>
<p class="p2">吃烤肉</p>
</div>
<script>
var self = document.getElementById('p1');
var father = p1.parentElement;
father.removeChild(self)
</script>
// 删除是一个动态的过程
father.removeChild(father.children[0]);
father.removeChild(father.children[1]);
father.removeChild(father.children[2]);
注意: 删除多个节点的时候, children是时刻变化的, 删除节点的时候要注意
插入节点 --> 重难点
我们获得了某个Dom节点, 假设这个dom节点是空的, 我们通过innerText , innerHTML 就可以增加一个元素, 但是如果这个DOM节点已经存在元素了, 我们就不能这么干, 因为会产生覆盖问题
追加
<p id="js">JavaScript</p>
<div id="list">
<p id="se">JavaSE</p>
<p id="ee">JavaEE</p>
<p id="me">JavaME</p>
</div>
<script>
var js = document.getElementById('js');
var list = document.getElementById('list');
list.appendChild(js); //追加到后面
</script>
效果:
创建一个新的标签, 实现插入
<p id="js">JavaScript</p>
<div id="list">
<p id="se">JavaSE</p>
<p id="ee">JavaEE</p>
<p id="me">JavaME</p>
</div>
<script>
var js = document.getElementById('js'); //已经存在的节点
var list = document.getElementById('list');
// list.appendChild(js); //追加到后面
//通过js 创建一个新的节点
// 下面的三行代码等价于 --> <p id="newP">小刘正在学习js</p>
var newP = document.createElement('p'); //创建一个p标签
newP.id = 'newP'; //为p标签添加一个 id = "newP"
newP.innerText = '小刘正在学习js';
list.appendChild(newP);
// 创建一个标签节点 通过这个属性可以设置任意的值
var myScript = document.createElement('script');
myScript.setAttribute('type','text/javascript');
list.appendChild(myScript);
</script>
<p id="js">JavaScript</p>
<div id="list">
<p id="se">JavaSE</p>
<p id="ee">JavaEE</p>
<p id="me">JavaME</p>
</div>
<script>
var js = document.getElementById('js'); //已经存在的节点
var list = document.getElementById('list');
// list.appendChild(js); //追加到后面
//通过js 创建一个新的节点
// 下面的三行代码等价于 --> <p id="newP">小刘正在学习js</p>
var newP = document.createElement('p'); //创建一个p标签
newP.id = 'newP'; //为p标签添加一个 id = "newP"
newP.innerText = '小刘正在学习js';
list.appendChild(newP);
// 创建一个标签节点 通过这个属性可以设置任意的值
var myScript = document.createElement('script');
myScript.setAttribute('type','text/javascript');
list.appendChild(myScript);
// 可以创建一个style标签
/* 等价于 -->
<style>
body {
background-color: yellowgreen;
}
</style>
*/
var myStyle = document.createElement('style'); //创建了一个空style标签
myStyle.setAttribute('type','text/css'); //设置style格式
myStyle.innerHTML = 'body{background-color: yellowgreen}'; // 填写标签内容
document.getElementsByTagName('head')[0].appendChild(myStyle);
</script>
insert
p id="js">JavaScript</p>
<div id="list">
<p id="se">JavaSE</p>
<p id="ee">JavaEE</p>
<p id="me">JavaME</p>
</div>
<script>
var ee = document.getElementById('ee');
var js = document.getElementById('js');
var list = document.getElementById('list');
// 代码逻辑 --> 要包含的节点.insertBefore(newNode,targetNode) 将新节点插入到目标节点之前
list.insertBefore(js,ee);
</script>

浙公网安备 33010602011771号