js基礎複習筆記
技術標籤:前端學習筆記
---於2021/1/26整理
js基礎複習筆記
1.變數及資料型別
- typeof:檢測資料型別,是運算子,不是函式
- undefined:未被定義,表示空變數,空變數被宣告但是沒有賦值
- null:空物件,表示什麼也沒有,宣告也沒有
- number:數值型別:整數或小數(浮點數)
- object:物件型別,陣列是特殊的物件。例如:{name:“張三”,age:“16”};
2.運算子
-
運算子 ‘+’ :只要 + 兩側有字串,就是拼接的意思;兩側都是數字就是加法的意思。
-
運算子 ‘ - ’,‘ * ’ :如果存在純數字字串(如“5”),計算機自動轉其為數字型進行運算
var a = “6”-2; // 4 a是number
var a = “6”*1; // 6 a是number 只要有一側為非純數字字串,結果為NaN(非數字型別)
var a = “51zxw”-2; // NaN -
比較運算子:
(= = ,!= ):等於和不等於 = =>只比較值,不比較型別4!=“4” 為假
(= = = ,! = = ): 全等和不全等 = => 比較值也比較資料型別
4 !=="4"為真
-
undefined: 假
Null: 假
false: 假
Number: 除0外都是真
string: 除空字串外都是真
物件: 都是真,不管是否為空
3.函式
函式宣告與建立
function jiafa(i,j){ //可以不用寫變數型別,因為js是弱型別語言
//i,j都是形參,沒有實際值,只會作用於函式內部
var a = i+j;
alert(a);
}
jiafa(4,6); //4和6是實參
// 函式內部不用var宣告,直接賦值方式宣告的變數是全域性變數(很少用到)要了解
// 如:
function zxw(){
a="我要自學網"; //zxw()函式一但被呼叫,a就是全域性變數
}
zxw(); //函式一定要執行,才能宣告全域性變數a,然後在函式外部輸出
document.write(a);
函式的2種定義方式
// 1.基本方式定義函式:
function 函式名(引數1,引數2,引數3...){
要執行的程式碼,函式體;
}
function dfg(){
alert("飯做好了");
};
// 2.自變數方式定義函式(賦值法定義函式) ==》這其實是匿名函式
var dfg = function (引數1,引數2,引數3...){
要執行的程式碼;
};
var dfg = function() {
alert("飯做好了");
};
呼叫函式的3種方法
// 呼叫函式:函式名();
// 1.當事件發生時(如:當用戶點選按鈕時)
// 2.當JS程式碼呼叫時
// cfb();
// cfb();
// 3.函式建立完成後自動呼叫
(
function cfb(){
for(var i = 9;i >= 1;i--){
for(var j = i;j >= 1;j--){
var b = i+"X"+j+"="+(i*j)+" ";
document.write(b);
}
document.write("<br />");
}
}
) ();
回撥函式
// 回撥函式:(callback函式)函式B作為引數傳遞到另一個函式A中,函式A執行函式B.函式B叫做回撥函式.
// 回撥函式:回家是主函式,發信息是回撥函式
function hj(a){ //a是形參,執行完hj()這個函式後,就會回撥a()
a();
};
function fxx(){
alert("我到家啦!");
};
hj(fxx);
//你把“發信息函式fxx()”當做引數傳給“回家函式hj()”,然後你女朋友必須先回到家後,
//主函式執行完了,再執行傳遞進去的"發信息函式fxx()",然後你就收到了一條資訊。
// 普通函式:
zxw(); //可以在函式宣告前呼叫函式
function zxw(){
var a = "我要自學網";
alert(a);
}
zxw();
// 匿名函式:沒有函式名
// 第一種匿名函式:函式沒有函式名,而是直接賦值給一個變數通過變數呼叫或直接呼叫
// zxw(); //不能在這裡呼叫。注意:匿名函式的呼叫語句,一定要放在函式宣告語句之後
var zxw = function(){
alert("我要自學網");
}
zxw(); //要在這裡呼叫
// 第二種匿名函式:
// 1.自呼叫
(function(){
alert("我要自學網");
})();
// 2.事件發生時呼叫
window.onload = function(){
alert("我要自學網");
};
// 3.函式中呼叫
setTimeout(
function(){
alert("我要自學網");
} ,3000);
內建功能函式
// 內建功能函式:
// 1.ECMAscript自帶的函式,ECMAscript將我們常用的一些功能封裝起來
// 2.我們不需要知道它是怎麼來的,只需要知道怎麼呼叫就可以
// alert(124);
// prompt();
// 1.Number()轉換成數值型別
var a = "123456";
var b = typeof Number(a); //number
alert(b);
alert(Number(a)); //123456
// 2.String()轉換成字串型別
var a = 123456;
var b = typeof String(a); //string
alert(b);
// 3.Boolean()轉換成boolean型別
var a = 123456;
var b = typeof Boolean(a); //boolean
alert(b);
// 3.parseInt()轉換成數值型別 !!!!!!!!非常重要
var a = "123px";
var b = typeof parseInt(a); //number
var c = parseInt(a); //123
alert(b);
alert(c);
4.陣列
陣列概念
// 1.陣列:一組資料的集合,陣列的每一個數據叫做一個元素
// 陣列是物件,是加了數字索引和length屬性的特殊物件
var arr=["校長","教室","老師","學生"];
alert(arr);
console.log(arr);
// 2.陣列元素可以是任意型別,同一個陣列中的不同元素可能是物件或陣列
var arr=["小李",2,true,["校長","教室"],{}];
console.log(arr);
陣列的建立方式
// 1.隱式方式建立陣列: 最常用
var arr=["校長","教室","老師","學生"];
// 2.直接例項化通過建構函式Array()建立
// 1.直接把陣列元素寫到括號裡
var arr=new Array("校長","教室","老師","學生");
// 2.建立陣列並給陣列元素賦值
var arr=new Array();
arr[0]="校長";
arr[1]="校長";
arr[2]="校長";
arr[3]="校長";
console.log(arr);
// 3.規定了陣列初始的長度,並給陣列元素賦值
// 陣列長度可以隨時動態調整
var arr=new Array(3);
arr[0]="校長";
arr[1]="校長";
arr[2]="校長";
arr[3]="校長";
console.log(arr);
陣列的修改 以及 for in 和 for of
var arr=new Array("校長","教室","老師","學生");
// 1.陣列中資料的修改:直接使用下標對陣列元素重新賦值
arr[2]="xiaozhang";
// 2.陣列中資料的增加:
arr[4]="小花"; //增加資料
console.log(arr);
// for in 使用很多!!!!!!缺點是:效率很低
for(i in arr){
document.write(arr[i]+"寫作業"+"<br/>");
};
// for of 比for in遍歷效率高,但是比普通for遍歷效率低
for(value of arr){
document.write(value+"寫作業"+"<br/>");
};
物件的建立
// js物件是包含很多屬性的變數
// js物件屬性指的是與 物件相關的值.js物件是無序屬性的集合
// 1.json模式建立物件,建立物件用{}號;(最主要的形式)
var ren={name:"小明",sex:"男",age:12,height:1.8};
console.log(ren);
// 2.直接例項化,通過建構函式Object()建立物件
var ren=new Object();
ren.name = "小明"; //新增屬性和屬性值
ren.sex = "男";
console.log(ren);
訪問物件
var ren={name:"小明",sex:"男",age:12,height:1.8};
//訪問物件屬性:
// 1.物件名["屬性名"]
var name = ren["name"]; //小明
alert(name);
// 2.物件名.屬性名(用的最多)
var sex = ren.sex;
alert(sex);
// 物件新增屬性
ren.gcd = true;
ren["yifu"]="red";
console.log(ren); //Object { name: "小明", sex: "男", age: 12, height: 1.8, gcd: true, yifu: "red" }
修改、刪除物件屬性
var ren={name:"小明",sex:"男",age:12,height:1.8};
// 修改物件屬性:
ren.age=13;
console.log(ren.age);
// 刪除物件屬性: delete 關鍵詞從物件中刪除屬性:會同時刪除屬性的值和屬性本身
delete ren.height;
alert(ren.height); //undefined
console.log(ren);
// 建構函式
function Ren(name,sex){ //建構函式建立物件
this.name=name;
this.sex=sex;
};
var xiaoming = new Ren("xiaoming","男");
console.log(xiaoming);
5.獲取元素及事件
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-JHhG4HiW-1611670099190)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210126164143824.png)]
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-NMX107sr-1611670099194)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210126164308511.png)]
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-zBYJwwM7-1611670099196)(D:\Users\Administrator\Documents\QQfiles\MobileFile\IMG_0673(20210126-163815)].JPG)
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-8f9OB2cT-1611670099199)(D:\Users\Administrator\Documents\QQfiles\MobileFile\IMG_0675(20210126-163815)].JPG)
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-C7rUasDa-1611670099202)(D:\Users\Administrator\Documents\QQfiles\MobileFile\IMG_0676(20210126-163815)].JPG)
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-p8XOqEsj-1611670099204)(D:\Users\Administrator\Documents\QQfiles\MobileFile\IMG_0677(20210126-163815)].JPG)
6.元素內容的操作
刪除內容
var btn = document.getElementById("btn"); //一個按鈕
var zxw = document.getElementById("zxw"); //一個div元素
btn.onclick = function() {
//刪除元素內容
zxw.innerHTML = "";
}
元素內容的移動
var btn = document.getElementById("btn"); //一個按鈕
var zxw1 = document.getElementById("zxw1"); //div
var zxw2 = document.getElementById("zxw2"); //div
var abc = 1;
btn.onclick = function() {
if (abc == 1) {
//實現把zxw1中的元素移動到zxw2中
//1.先複製zxw1元素內容到zxw2中
zxw2.innerHTML = zxw1.innerHTML;
//2.再刪除zxw1元素內容
zxw1.innerHTML = "";
abc = 0;
} else {
//1.先複製zxw2元素內容到zxw1中
zxw1.innerHTML = zxw2.innerHTML;
//2.再刪除zxw1元素內容
zxw2.innerHTML = "";
abc = 1;
}
}
元素內容的交換
var btn = document.getElementById("btn");//一個按鈕
var zxw1 = document.getElementById("zxw1");//div
var zxw2 = document.getElementById("zxw2");//div
btn.onclick = function() {
//實現把zxw1中的元素交換到zxw2中
var temp = zxw2.innerHTML;
zxw2.innerHTML = zxw1.innerHTML;
zxw1.innerHTML = temp;
}
7.元素樣式的操作
操作元素尺寸
var btn = document.getElementById("btn");
var zxw = document.getElementById("zxw");
btn.onclick = function() {
//實現把zxw方框點選一次,增大一次
//獲取元素尺寸並轉成數值
var old_width = zxw.style.width;
var old_height = zxw.style.height;
zxw.style.width = (parseInt(old_width) + 10) + "px";
// alert(zxw.style.width);
zxw.style.height = (parseInt(old_height) + 10) + "px";
// alert(zxw.style.height);
}
獲取非行內樣式
var btn = document.getElementById("btn");
var zxw = document.getElementById("zxw");
btn.onclick = function() {
//獲取非行內元素尺寸並轉成數值型別。注:getComputedStyle只對IE9以上的標準瀏覽器生效
var old_width = getComputedStyle(zxw, null).width;
var old_height = getComputedStyle(zxw, null).height;
var bgcolor = getComputedStyle(zxw, null).backgroundColor; //簡寫的屬性,要一個一個獲取,採用駝峰命名法
// alert(bgcolor);
zxw.style.width = (parseInt(old_width) + 10) + "px ";
// alert(zxw.style.width);
zxw.style.height = (parseInt(old_height) + 10) + "px ";
// alert(zxw.style.height);
}
判斷是否為IE瀏覽器
if (document.all) { //IE瀏覽器
var old_width = zxw.currentStyle.width;
var old_height = zxw.currentStyle.height;
} else { //其他瀏覽器
var old_width = getComputedStyle(zxw, null).width;
var old_height = getComputedStyle(zxw, null).height;
var bgcolor = getComputedStyle(zxw, null).backgroundColor; //簡寫的屬性,要一個一個獲取,採用駝峰命名法
}
// 要使IE9以下的標準瀏覽器生效方法如下:
// var old_width = zxw.currentStyle.width;
// var old_height = zxw.currentStyle.height;
// alert(bgcolor);
zxw.style.width = (parseInt(old_width) + 10) + "px ";
zxw.style.height = (parseInt(old_height) + 10) + "px ";
元素顯隱
var btn = document.getElementById("btn");
var zxw = document.getElementById("zxw");
var abc = 1;
btn.onclick = function() {
if(abc == 1){
zxw.style.display = "none";//元素隱藏
abc = 0;
}else {
zxw.style.display = "block";//元素顯示
abc = 1;
}
}
下滑顯隱(下滑到一定高度顯示出元素)
//網頁正文全文高,包括當前不可見部分的元素的高度。
var scrollHeight = document.documentElement.scrollHeight;
//獲得網頁可見區域高(包括邊線的高),包括padding、border、水平滾動條。 但不包括margin的元素的高度
var offsetHeight = document.documentElement.offsetHeight;
//獲得網頁可見區域高,包括padding 但不包括border、水平滾動條、margin的元素的高度
var clientHeight = document.documentElement.clientHeight;
//滾動的是body,所以給body新增滾動事件
//給body新增滾動事件,以實現下滑到一定高度時,顯現左右圖片
document.body.onscroll=function(){
var s_top = document.documentElement.scrollTop;//滾動條離頂部的距離
//alert(s_top); //s_top是number型別
if(s_top > scrollHeight/4) {
document.getElementById("zxw_l").style.display = "block";
document.getElementById("zxw_r").style.display = "block";
}else{
document.getElementById("zxw_l").style.display = "none";
document.getElementById("zxw_r").style.display = "none";
};
}
選項卡切換
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<style type="text/css">
*{margin: 0;padding: 0;}
li{list-style: none;} /*去掉列表的預設小圓點*/
#box{
width: 600px;height: 400px;margin: 0 auto;
border: 1px black solid;
}
#tab{
width: 600px;height: 50px;line-height: 50px;text-align: center;
}
#tab li{
width: 200px;height: 50px;font-size: 30px;float: left;
}
#cont{
width: 600px;height: 340px;line-height: 350px;
text-align: center;position: relative;
margin-top: 10px;
}
#cont li{
width: 600px;height: 340px;font-size: 25px;
position: absolute;top: 0;left: 0;
display: none;
}
</style>
</head>
<body>
<div id="box">
<ul id="tab">
<li style="background: red;">選項卡1</li>
<li style="background: blue;">選項卡2</li>
<li style="background: green;">選項卡3</li>
</ul>
<ul id="cont">
<li style="background: red; display: block;">內容1</li>
<li style="background: blue;">內容2</li>
<li style="background: green;">內容3</li>
</ul>
</div>
<script type="text/javascript">
var tab = document.querySelectorAll("#tab li");
var cont = document.querySelectorAll("#cont li");
for(var i=0;i<tab.length;i++){
//給i號元素加 記號
tab[i].xb=i; //選項卡的下標,方便更改對應下標的內容
tab[i].onclick=function() {
for(var j=0;j<cont.length;j++){//首先把所有內容隱藏
cont[j].style.display = "none";
}
//必須要用this.xb才能訪問到對應的cont,讓它顯示出來
cont[this.xb].style.display = "block";//再顯現一個內容
}
}
</script>
</body>
</html>
圍棋效果:第一次點選為黑色,第二次點選為白色(奇數次為黑色,偶數次為白色)
var abc=1;
//獲取所有名字叫wqqz的元素
var wqqz = document.getElementsByClassName("wqqz");
for(var i=0;i < wqqz.length;i++){//給每個棋子都新增點選事件
wqqz[i].onclick=function(){
if(abc == 1) {
this.style.background="#000";
abc=0;
}else {
this.style.background="#ccc";
abc=1;
}
this.style.boxShadow="3px 3px 1px #666";
}
}
8.定時器
兩種定時器( setTimeout 和 setInterval )
// 1.setTimeout(要執行的動作,時間:毫秒); 指多少時間後執行,只能執行一次(類似定時炸彈)
setTimeout(function(){
document.write("我要自學網");
},3000);
// 2.setInterval(要執行的動作,時間:毫秒); 指經過多少時間就執行,可以重複執行多次(類似鬧鐘)
setInterval(function(){
document.write("我要自學網<br/>");
},1000);
清理兩種定時器(clearTimeout 和 clearInterval)
// 1.setTimeout(要執行的動作,時間:毫秒); 指多少時間後執行,只能執行一次(類似定時炸彈)
var timer2 = setTimeout(function(){
console.log("我要自學網2<br/>");
},4000);
// 2.setInterval(要執行的動作,時間:毫秒); 指經過多少時間就執行,可以重複執行多次(類似鬧鐘)
var timer1 = setInterval(function(){
console.log("我要自學網1<br/>");
},1000);
// 清理定時器
// 1.clearInterval(要清理的定時名稱);
// clearInterval(timer1);
// 2.clearTimeout(要清理的定時名稱);
// clearTimeout(timer2);
var btn = document.getElementById("btn");
btn.onclick=function(){
clearInterval(timer1);
clearTimeout(timer2);
}
定時器的3種寫法
function zxw(){
document.write("我要自學網<br/>");
};
function wyzxw(x){
document.write(x);
};
//要執行動作的幾種寫法:(定時器的第一個引數)
// 1.匿名函式:
setInterval(function(){
document.write("我要自學網<br/>");
},1000);
// 2.函式名:不能傳遞引數
setInterval(zxw,1000);
// 3.把函式當成字串,就可以傳遞引數了
var a = "我要自學網2<br/>";
setInterval("wyzxw(a)",1000);
倒計時跳轉
var clock = document.getElementById("clock");
var tm = clock.innerHTML;
var tim = setInterval(timer,1000); //開啟定時器 1s執行一次
function timer() {
tm--;
clock.innerHTML = tm;
if(tm <= 0) {
clearInterval(tim); //清除定時器
location.href = "https://www.51zxw.net"; //跳轉頁面
};
}
點選物體從左到右,然後從右到左運動
var btn = document.getElementById("btn");
var zxw = document.getElementById("zxw");
var buchang=10;
//有一個問題:如果連續點選很多次按鈕,則會觸發很多次定時器,導致物體運動的速度越來越快。
//解決辦法在06 清除定時器中
function yidong(){
var tpleft = parseInt(zxw.style.left);
if(tpleft > 300) buchang -= 10;
if(tpleft < 10) buchang += 10;
zxw.style.left = tpleft+buchang+"px";
}
btn.onclick = function(){
timer = setInterval(yidong,100);
}
清除定時器(解決上一個的問題)
var btn = document.getElementById("btn");
var zxw = document.getElementById("zxw");
var buchang=10;
var timer;//定時器要宣告在外面!!!!!!!!!!解決問題的關鍵
function yidong(){
var tpleft = parseInt(zxw.style.left);
if(tpleft > 300) buchang -= 10;
if(tpleft < 10) buchang += 10;
zxw.style.left = tpleft+buchang+"px";
}
btn.onclick=function(){
clearInterval(timer);//每次觸發定時器前,先清除上一個定時器
timer = setInterval(yidong,100);
}
十秒免單遊戲
var btn = document.getElementById("btn");
var clock = document.getElementById("clock");
//每10ms增加一次數字
var tm=0;
var flag=1; //1表示開始 0表示使用者第二次點選,叫停
var timer;
function jishi(){
if(tm >= 1199){
clearInterval(timer);
}
tm += 1;
clock.innerHTML = tm;
}
btn.onclick=function(){
if(flag == 1){
timer = setInterval(jishi,10);//100ms等於1s
flag = 0;
}
else {
clearInterval(timer);//關閉定時器,此時是第二次點選,使用者叫停了
//生成1-9的隨機數,減少成功的機率
var p = Math.floor(Math.random()*10);
if(tm == 1000 && p==9){
alert("挑戰10秒成功")
}else if(tm == 1000 && p!=9){
clock.innerHTML = 1002;
alert("挑戰10秒失敗");
}else{
alert("挑戰10秒失敗");
flag = 1;
}
}
}
9.放大鏡
獲取事件物件
var left = document.getElementById("left");
//給left元素繫結滑鼠移動事件
left.onmousemove = function(event){
//獲取事件物件
//event代表事件的狀態,例如觸發event物件的元素、滑鼠的位置及狀態、按下的鍵等
//event物件只在事件發生的過程中才有效
// var ev = window.event; //IE寫法
// var ev = event; //其他瀏覽器寫法,要傳入event引數
var ev = window.event || event;
alert(ev.type); //mousemove
}
獲得滑鼠座標
var left = document.getElementById("left");
//給left元素繫結滑鼠移動事件
left.onmousemove = function(evt){
//獲取事件物件
var ev = window.event || evt;
//獲取滑鼠與元素的位置,相對於被觸發的元素左上角位置
// var m_left = ev.offsetX;
// var m_right = ev.offsetY;
// var m_left = ev.layerX; //對付老版的火狐瀏覽器
// var m_right = ev.layerY;
var m_left = ev.offsetX || ev.layerX;
var m_right = ev.offsetY || ev.layerY;
document.title = (m_left+"|"+m_right);
}
放大鏡效果–全
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>放大鏡效果</title>
<style type="text/css">
*{margin: 0;padding: 0;}
#left{
width: 500px;height: 400px;background: url(wqqp.jpg) no-repeat;
float: left;margin-left:20px;position: relative;
cursor: crosshair;
}
#box{
width: 250px;height: 200px;background: #999;opacity: 0.8;
position: absolute;
top: 0;left: 0;display: none;
}
.cover{
width: 500px;height: 400px;background: rgba(0,0,0,0);
position: absolute;
top: 0;left: 0;
}
#right{
width: 500px;height: 400px;float: left;margin-left:20px;
position: relative;overflow: hidden;display: none;
}
#pic{
position: absolute;
top: 0;left: 0;
}
</style>
</head>
<body>
<div id="left">
<div id="box"></div> <!--灰色框是隨著滑鼠不斷變化的-->
<!--新增這個cover的目的是,防止灰色區域亂閃,因為滑鼠移動事件是繫結在left上的,
而灰色框在left的上層,所以滑鼠移動事件總是發生在灰色框上,滑鼠移動的距離是以灰色框為物件計算的。
而灰色框又是隨著滑鼠不斷變化的,甚至當滑鼠移出灰色框的瞬間,移動到背景圖上時,
事件又是按背景圖為物件計算的,事件物件切換之間頁面渲染下灰色框會瞬移回0,0的位置。
加遮罩層,按程式執行順序,遮罩層的層級 > 灰色框 > 背景圖,
又因為尺寸上遮罩層全覆蓋背景圖尺寸,所以全程都是以最上層的遮罩層為物件計算的。-->
<div class="cover"></div>
</div>
<div id="right">
<img src="../02 元素樣式的操作/img/wqqp.jpg" id="pic"/>
</div>
<script type="text/javascript">
var left = document.getElementById("left");
var box = document.getElementById("box");
var right = document.getElementById("right")
//給left元素繫結滑鼠移動事件
left.onmousemove = function(event){
//獲取事件物件
var ev = window.event || event;
//獲取滑鼠與元素的位置
var m_left = ev.offsetX || ev.layerX;
var m_top = ev.offsetY || ev.layerY;
// document.title = (m_left+"|"+m_right);
//計算box的位置 box大小為250*200 這樣計算box位置會使滑鼠位於box中心
var box_left = m_left-125;
var box_top = m_top-100;
document.title = (box_left+"|"+box_top);
//設定條件,不讓灰色區域出界
box_left = box_left < 0 ? 0 : box_left;
box_top = box_top < 0 ? 0 : box_top;
box_left = box_left > 250 ? 250 : box_left;
box_top = box_top > 200 ? 200 : box_top;
//讓灰色區域box動起來
box.style.left = box_left + "px";
box.style.top = box_top + "px";
//讓右側圖片動起來 因為右側圖片的大小是左側的兩倍
pic.style.left = "-" + box_left*2 + "px";
//若滑鼠右移,則要把右側大圖片左移,才能看到對應的右側
pic.style.top = "-" + box_top*2 + "px";
//若滑鼠下移,則要把右側圖片上移,才能看到對應的下側
}
//滑鼠移入,則顯示放大
left.onmouseover = function(){
box.style.display = "block";
right.style.display = "block";
}
//滑鼠移出,則隱藏
left.onmouseout = function(){
box.style.display = "none";
right.style.display = "none";
}
</script>
</body>
</html>
10.時間物件及其方法
建立時間物件
//建立時間物件
// 1.建立當前的時間物件
var myDate = new Date();
// 2.使用引數建立時間物件(年,月,日,時,分,秒,毫秒)
var myDate = new Date(2019,10,1,9,10,40,50);
// 3.使用字串建立時間物件
var myDate = new Date("2019/10/1 9:10:40");
// 4.使用時間戳建立時間物件
//時間戳:從格林威治時間1970年01月01日00時00分00秒(北京時間1970年01月01日08時00分00秒)起至現在的總毫秒數
//是一個13位的數字
var myDate = new Date(1560000000000);
alert(myDate);
獲取年 月 日 星期
//建立時間物件
//一、建立當前的時間物件
var myDate = new Date();
// 1.獲取完整的年份(4位)
var year = myDate.getFullYear();
// 2.獲取當前月份(0-11,0代表1月)
var month = myDate.getMonth()+1;
// 3.獲取當前日(1-31)號
var dt = myDate.getDate();
// 4.獲取當前星期幾(0-6,0代表週日)
var xq = myDate.getDay();
alert(myDate);
alert(dt);
獲取時 分 秒 毫秒
//建立時間物件
//1.建立當前的時間物件
var myDate = new Date();
//獲取小時數(0-23)
var hours = myDate.getHours();
//獲取當前分鐘數(0-59)
var minute = myDate.getMinutes();
//獲取當秒數(0-59)
var seconds = myDate.getSeconds();
//獲取當前毫秒數(0-999)
var milliseconds = myDate.getMilliseconds();
alert(myDate);
alert(milliseconds);
獲取完整的年月日、時分秒
//獲取完整的年月日
var myDate = new Date().toLocaleDateString(); //2019/6/8
var myDate = new Date(1560000000000).toLocaleDateString();
//獲取完整的時分秒
var myTime = new Date().toLocaleTimeString(); //下午9:20:00
var myTime = new Date(1560000000000).toLocaleTimeString();
//獲取完整的年月日 時分秒
var myDateTime = new Date().toLocaleString(); //2019/6/8 下午9:20:00
var myDateTime = new Date(1560000000000).toLocaleString();
alert(myDate);
alert(myTime);
alert(myDateTime);
時間戳
//時間戳:從格林威治時間1970年01月01日00時00分00秒(北京時間1970年01月01日08時00分00秒)起至現在的總毫秒數
//13位的數字
//精確到毫秒
var t = new Date().getTime();
//精確到秒:實際運用中經常這樣,經常用來判斷一個會員是否到期
var t = parseInt(new Date().getTime()/1000);
var o_t = parseInt(new Date("2020/10/1 9:0:5").getTime()/1000);
var n_t = parseInt(new Date().getTime()/1000);
if((n_t-o_t) < 31536000) { //一年365*24*60 s
alert("會員有效");
}else{
alert("會員無效");
}
11.數字物件及其方法
數字取整
// Math物件:用於執行數學任務
// Math 物件並不像Date 和String那樣是物件的類,因此沒有建構函式
var zxw = -1.53456;
//1.向下取整 後的數一定比當前數小
var a = Math.floor(zxw);// -2
//2.向上取整 後的數一定比當前數大
var b = Math.ceil(zxw); //-1
//3.四捨五入
var c = Math.round(zxw); //-2
alert(a);
alert(b);
alert(c);
隨機取數
//獲取0-1之間的隨機數: 包含0,但不包含1
var a = Math.random();
//獲取0-10之間的隨機數: 包含0,但不包含10
var b = Math.random()*10;
//獲取0-5之間的隨機數: 包含0,但不包含5
var c = Math.random()*5;
//獲取0-3之間的隨機整數: 0 1 2 這種方法用的多
var zxw = Math.floor(Math.random()*3); //向下取整
//獲取0-3之間的隨機整數:0 1 2 3,可以取到0,但是概率極小
var zxw = Math.ceil(Math.random()*3); //向上取整
alert(zxw);
//獲取2,3,4,5中隨機數
var a = Math.random()+2; //獲取2-3的隨機數,2.幾-3.幾。 最小是2
var b = Math.random()*(5-2+1); //獲取0-4的隨機數, 0.幾-3.幾
var c = Math.random()*(5-2+1)+2; //2.幾-5.幾
var zxw = Math.floor(Math.random()*(5-2+1)+2);
//獲取給定範圍的隨機整數(包含最小數和最大數)
// 公式:var zxw = Math.floor(Math.random()*(最大數-最小數+1)+最小數);
//獲取最小是5,最大是50,包含5和50的隨機整數
var zxw = Math.floor(Math.random()*(50-5+1)+5);
alert(zxw);
12.字串及其方法
字串查詢
//1.查詢指定位置的字元
//返回的是某個位置的字元,即字元在字串中的下標,第一個字元的下標是0
var zxw = "www.51zxw.net";
var a = zxw.charAt(4); //返回5
//2.返回某個指定的字串值在字串中首次出現的位置
//對大小寫敏感,如果要檢索的字串沒有出現,則該方法返回-1
var zxw = "www.51zxw.net";
var a = zxw.indexOf("w");
var b = zxw.indexOf("."); //返回3
var c = zxw.indexOf("W"); //返回-1
字串替換
//1.替換字串
// 語法:replace("要替換的字元","用什麼字元替換");
var zxw1 = "www.51zxw.net";
var zxw2 = "www.51zxw.net www.51zxw.net www.51zxw.net";
//只匹配出現的第一個
var a = zxw1.replace("www","aaa"); //aaa.51zxw.net
var b = zxw2.replace("www","aaa"); //aaa.51zxw.net www.51zxw.net
//全域性匹配 /www/g 正則表示式
var c = zxw2.replace(/www/g,"aaa"); //aaa.51zxw.net aaa.51zxw.net aaa.51zxw.net
//忽略大小寫只匹配出現的第一個 /WWW/i
var d = zxw2.replace(/WWW/i,"aaa"); //aaa.51zxw.net www.51zxw.net www.51zxw.net
//全域性匹配和忽略大小寫
var d = zxw2.replace(/WWW/ig,"aaa"); //aaa.51zxw.net aaa.51zxw.net aaa.51zxw.net
alert(d);
字串大小寫轉換
//1.字串大小寫轉換
var zxw1 = "www.51zxw.net";
var zxw2 = "WWW.51ZXW.NET";
//toUpperCase()將所有的字串都轉換成大寫字母
var a = zxw1.toUpperCase();
//toLowerCase()將所有的字串都轉換成小寫字母
var b = zxw1.toLowerCase();
//2.把字串的首字母轉成大寫
var xm = "xiaoming";
//第一步:找到第一個字元
var e = xm.charAt(0);
//第二步:轉成大寫
var f = e.toUpperCase();
//第三步:字串替換
var g = xm.replace(e,f);
var XM = xm.replace(xm.charAt(0),xm.charAt(0).toUpperCase());
var XM = xm.replace(xm[0],xm[0].toUpperCase());
alert(XM);
字串的擷取 subsring substr
var zxw = "www.51zxw.net";
//1.substring() 擷取指定下標範圍的字串
//substring()不接受負值
//只有一個引數時,從指定位置擷取到字串結尾
var a = zxw.substring(4); //從第5個字元開始到字串結尾,51zxw.net
//有兩個引數時,擷取指定下標範圍的字串,包頭不包尾
var b = zxw.substring(4,8); //51zx
var c = zxw.substring(4,9); //51zxw 從下標4到下標8,不包括下標9
var d = zxw.substring(-4,-2); //錯誤
alert(a);
//2.substr() 擷取從指定下標開始擷取指定個數
// 語法: substr(開始下標,擷取個數);
//只有一個引數時,從指定位置擷取到字串結尾
var a = zxw.substr(4); // 從第5個字元開始到字串結尾,51zxw.net
//有兩個引數時,擷取從指定下標開始,指定個數的字元,包頭
var b = zxw.substr(4,8); // 51zxw.ne
var c = zxw.substr(4,9); // 51zxw.net 從下標4到下標8,不包括下標9
//開始下標可以接受負值,(-1指字串中最後一個字元)
var d = zxw.substr(-4,2); // .n
//var d = zxw.substr(-4,-2); // 錯誤
alert(d);
- 字串分割 split()
var zxw = "www.51zxw.net";
//分割字串 split(); 把一個字串分割成為字串陣列
//語法:split(指定位置分割,指定陣列的長度);
//var a = zxw.split("."); //Array(3) [ "www", "51zxw", "net" ]
//var b = zxw.split(".",2); //Array [ "www", "51zxw" ]
//-----------------------------------------------
var str = "中文名:光合速率||出品時間:2019||出演人:和帥康、搞活動卡";
var c = str.split("||");
console.log(c);
alert(c[1]);
13.陣列及物件的方法
將陣列轉成字串 陣列名.join()
//1.join()將陣列的元素轉成一個字串,原來的陣列會保留
//join("分隔符"); 該方法只接收一個引數,即分隔符,省略的話則用預設逗號分割符。
//var arr = [1,2,3,4,5,6];
var arr = ["2020","01","24"];
var a = arr.join(); // 2020,01,24
var b = arr.join("/"); // 2020/01/24
console.log(a);
console.log(arr);
將偽陣列轉成陣列 Array.from(偽陣列名)
//偽陣列變成陣列
//Array.from()將偽陣列變成陣列,只要有length屬性的就可以轉成陣列,ES6語法
//把字串,set資料型別轉成陣列
var zxw = "51zxw";
var arr = [1,2,3,4,5,6];
var obj = {name:"小明",age:18};
console.log(zxw.length);
console.log(arr.length);
console.log(obj.length); //物件沒有長度
var a = Array.from(zxw); //返回Array(5) [ "5", "1", "z", "x", "w" ]
console.log(a);
var b = Array.from(arr);
console.log(b);
var c = Array.from(obj); //返回Array []
console.log(c);
陣列末尾刪除和新增資料 會改變原陣列
var arr = [1,2,3,4,5,6];
//刪除陣列末尾資料
//1.pop() 陣列末尾移除最後一項,減少陣列的length值,然後返回移除的元素
//pop()會直接修改原陣列,而不是建立一個新陣列
var a = arr.pop(); //返回的是移除的最後元素'6'
console.log(a);
console.log(arr);
//2.push() 用於向陣列的末尾新增一個或多個元素,並返回修改後的陣列的長度(數值型別)
var b = arr.push(8); //返回7 ==> 新增後陣列的長度
console.log(b);
console.log(arr);
陣列開頭刪除和新增資料 shift()= =>刪除 unshift()= =>新增 會改變原陣列
var arr = [1,2,3,4,5,6];
//刪除陣列開頭資料
//1.shift() 刪除陣列開頭第一項,減少陣列的length值,然後返回移除的元素
//shift()會直接修改原陣列,而不是建立一個新陣列
var a = arr.shift(); //返回的是移除的開頭元素'1'
console.log(a);
console.log(arr);
//2.unshift() 用於向陣列的開頭新增一個或多個元素,並返回修改後的陣列的長度(數值型別)
var b = arr.unshift(8); //返回7 ==> 新增後陣列的長度
console.log(b);
console.log(arr);
陣列的任意位置刪除和新增,替換,擷取資料 splice() 會改變原陣列
//splice(): 刪除、插入、替換、擷取,會直接修改原陣列
//1.刪除:可以刪除任意數量的項,需指定2個引數:要刪除的第一項的位置和要刪除的項數
var arr = ["趙","錢","孫","李"];
arr.splice(1,2);
console.log(arr);
//2.插入:可以向指定位置插入任意數量的項,需提供至少3個引數,起始位置、0(要刪除的項數)和要插入的資料
var arr = ["趙","錢","孫","李"];
arr.splice(2,0,"宋","吳"); //[ "趙", "錢", "宋", "吳", "孫", "李" ]
arr.splice(arr.length,0,"song","wu");
console.log(arr);
//3.替換:可以向指定位置插入任意數量的項,且同時刪除任意數量的項,需提供至少3個引數,
// 起始位置、要刪除的項數和要插入的任意數量的項。插入的項數不必與刪除的項數相等
var arr = ["趙","錢","孫","李"];
arr.splice(1,1,"宋"); //[ "趙", "宋", "孫", "李" ]
arr.splice(1,2,"宋","吳"); //[ "趙", "宋", "吳", "李" ]
arr.splice(1,2,"宋","吳","周","王"); //[ "趙", "宋", "吳", "周", "王", "李" ]
console.log(arr);
//4.擷取: 返回一個包含從原始陣列中刪除項的陣列
//可以擷取從指定位置開始,指定元素個數的陣列
var arr = [ "趙", "錢","孫","李", "周", "王", "李" ];
var abc = arr.splice(1,4); //["錢","孫","李", "周"]
console.log(abc);
console.log(arr);
擷取指定下標的陣列或字串 slice()
//substring 也有一樣的功能,只不過它只能用於字串
//substring(開始下標,結束下標),結束下標包頭不包尾
//slice():擷取指定下標的陣列或字串元素,不會修改原陣列或字串
//語法:slice(開始下標,結束下標);
//如果結束下標未被規定,那麼會選取從開始下標到陣列結尾的所有元素
//返回一個包含從開始下標到結束下標(不包括結束下標)的新陣列
var arr = [0,1,2,3,4,5,6,7,8,9];
var abc = arr.slice(2); //Array(8) [ 2, 3, 4, 5, 6, 7, 8, 9 ]
var bcd = arr.slice(3,9); //Array(6) [ 3, 4, 5, 6, 7, 8 ]
var jg = arr.slice(-6,-1); //Array(5) [ 4, 5, 6, 7, 8 ] 從倒數第6個-倒數第1個(但不包括結束下標)
var jg = arr.slice(-6,-9); //空陣列
console.log(abc);
console.log(bcd);
console.log(jg);
var str = "www.51zxw.net";
var zxw = str.slice(4); //51zxw.net
var z = str.slice(4,9); //51zxw
var w = str.slice(-7,-1); //zxw.ne
console.log(w);
查詢指定元素的下標
var arr1 = [ "趙", "宋", "吳","李", "周", "王", "李" ];
//1.indexOf() 查詢指定元素的下標,從前往後查詢
//若有重複的,則返回第一個查到的下標
//若不存在則返回-1
var a = arr1.indexOf("李"); //3
var b = arr1.indexOf("馮"); //-1 不存在則返回-1
console.log(b);
//2.lastIndexOf() 查詢指定元素的下標,從後往前查詢
//若有重複的,則返回第一個查到的下標
//若不存在則返回-1
var arr2 = [ "趙", "宋", "吳","李", "周", "王", "李" ];
var c = arr2.lastIndexOf("李"); //6
console.log(c);
合併陣列及反轉陣列 concat() 和 reverse()
//合併陣列及反轉陣列
//1.concat() 方法用於連線兩個或多個數組,不會改變原陣列
//該方法會先建立當前陣列的一個副本,不會改變原有的陣列,會返回一個新陣列
var arr1 = [1,2,3];
var arr2 = [4,5,6];
var arr3 = [7,8,9];
var arr_a = arr1.concat(arr2);
var arr_b = arr1.concat(arr2,arr3);
console.log(arr_a); //Array(6) [ 1, 2, 3, 4, 5, 6 ]
console.log(arr_b); //Array(9) [ 1, 2, 3, 4, 5, 6, 7, 8, 9 ]
console.log(arr1); //Array(3) [ 1, 2, 3 ]
console.log(arr2); //Array(3) [ 4, 5, 6 ]
var arr_c = arr2.concat(arr1);
console.log(arr_c); //Array(6) [ 4, 5, 6, 1, 2, 3 ]
console.log(arr1); //Array(3) [ 1, 2, 3 ]
console.log(arr2); //Array(3) [ 4, 5, 6 ]
//2.reverse() 反轉陣列中的元素
//該方法會改變原來的陣列,而不會建立新的陣列
//返回值並不是排序後的陣列,而是排序後陣列的引用
var arr4 = [1,2,3,4,5,6];
arr4.reverse(arr4); //Array(6) [ 6, 5, 4, 3, 2, 1 ]
var flag = arr4.reverse(arr4); //flag ==> Array(6) [ 6, 5, 4, 3, 2, 1 ]
console.log(arr4);
console.log(flag);
陣列元素升序排序 sort()會改變原陣列
//sort():用於對陣列的元素進行排序
//預設:按升序排序陣列項,即最小的值位於最前面,最大的值排在最後面
//會直接修改原陣列
//sort() 會轉成字串再比較,並從第1個字元進行比較,再比較第2位字元
var arr1 = [3,7,4,3,1,5,7];
arr1.sort(); //Array(7) [ 1, 3, 3, 4, 5, 7, 7 ]
console.log(arr1);
var arr2 = ["e","j","i","y","p","r","o"];
arr2.sort(); //Array(7) [ "e", "i", "j", "o", "p", "r", "y" ]
console.log(arr2);
var arr3 = [33,99,17,6,24,2];
arr3.sort(); //Array(6) [ 17, 2, 24, 33, 6, 99 ]
console.log(arr3);
var arr4 = ["es","jg","iy","ye","pq","rh","ol"];
arr4.sort(); //Array(7) [ "es", "iy", "jg", "ol", "pq", "rh", "ye" ]
console.log(arr4);
var arr5 = ["aa","aj","ff","mb","pq","rh","ol"];
arr5.sort(); //Array(7) [ "aa", "aj", "ff", "mb", "ol", "pq", "rh" ]
console.log(arr5);
陣列元素自定義排序 sort(比較函式)會改變原陣列
//sort():用於對陣列的元素進行排序
//預設:按升序排序陣列項,即最小的值位於最前面,最大的值排在最後面
//會直接修改原陣列
//sort() 會轉成字串再比較,並從第1個字元進行比較,再比較第2位字元
// 引數為規定排序順序,必須是函式
// 語法:sort(比較函式);
// 比較函式應該具有兩個引數a ,b ,其返回值如下:
// 若a < b,在排序後的陣列中 a 應該出現在 b 之前,則返回一個小於0的值
// 若a == b,則返回0
// 若a > b,則返回一個大於0的值
//1.升序排列
function asc(a,b){
if(a < b) return -1;
else if(a > b) return 1;
else return 0;
};
//2.降序排列
function desc(a,b){
if(a < b) return 1;
else if(a > b) return -1;
else return 0;
};
// var arr1 = [3,7,4,3,1,5,7];
// arr1.sort(asc); //Array(7) [ 1, 3, 3, 4, 5, 7, 7 ]
// console.log(arr1);
// var arr2 = ["e","j","i","y","p","r","o"];
// arr2.sort(); //Array(7) [ "e", "i", "j", "o", "p", "r", "y" ]
// console.log(arr2);
//
var arr3 = [33,99,17,6,24,2];
arr3.sort(asc); //Array(6) [ 2, 6, 17, 24, 33, 99 ]
console.log(arr3);
var arr3 = [33,99,17,6,24,2];
arr3.sort(desc); //Array(6) [ 99, 33, 24, 17, 6, 2 ]
console.log(arr3);
var arr4 = ["es","jg","iy","ye","pq","rh","ol"];
arr4.sort(asc); //Array(7) [ "es", "iy", "jg", "ol", "pq", "rh", "ye" ]
console.log(arr4);
陣列元素過濾 filter()
//1.filter() 把陣列中的某些元素過濾掉,然後返回剩下的元素,接收的是一個回撥函式
//陣列中的每一項執行給定函式,返回滿足過濾條件組成的新陣列
//不會改變陣列
var arr1 = [1,2,3,4,5,6,7,8,9,10];
//保留大於6的陣列元素
function abc(x){
return x > 6;
};
var res1 = arr1.filter(abc); //Array(4) [ 7, 8, 9, 10 ]
console.log(res1);
//保留陣列中的奇數
function bcd(x){
return x % 2 == 1;
};
var res2 = arr1.filter(bcd); //Array(5) [ 1, 3, 5, 7, 9 ]
console.log(res2);
console.log(arr1);
使用set去重複
//set資料型別,ES6提供的新資料結構
//它類似於陣列,但是成員的值都是唯一的,沒有重複值
var arr1 = [1,1,2,2,3,3];
//1.陣列轉成set
var set1 = new Set(arr1); //Set(3) [ 1, 2, 3 ]
console.log(set1);
//2.set轉陣列
arr2 = Array.from(set1); //Array(3) [ 1, 2, 3 ]
arr3 = [...set1]; //Array(3) [ 1, 2, 3 ]
console.log(arr2);
console.log(arr3);
//3.has()判斷一個值是否在set中
var p = set1.has(2); //true
console.log(p);
var k = set1.has(5); //false
console.log(k);
陣列並集,交集,差集
var arr1 = [1,2,3];
var arr2 = [2,3,4];
var set1 = new Set(arr1);//Set(3) [ 1, 2, 3 ]
var set2 = new Set(arr2);//Set(3) [ 2, 3, 4 ]
console.log(set1);
console.log(set2);
//1.並集:a+b,然後去重複 [1,2,3,4]
var union = new Set([...set1,...set2]); //Set(4) [ 1, 2, 3, 4 ]
console.log(union);
//2.交集:a,b共同的部分 [2,3]
var intersection = new Set([...set1].filter(x=>set2.has(x))); //Set [ 2, 3 ]
// function(x) {
// return set2.has(x);
// }
console.log(intersection);
//3.差集:a-b [1]
var diff = new Set([...set1].filter(x=>!set2.has(x))); //Set [ 1 ]
console.log(diff);
14.物件的合併 assigh() 會修改目標物件
//Object.assigh()方法用於物件的合併
//將源物件的屬性,複製到目標物件中
//第一個是目標物件,後面的引數都是源物件
//會修改目標物件,不會修改源物件
var obj1 = {a:1};
var obj2 = {b:2};
var obj = Object.assign(obj1,obj2);
console.log(obj1); //Object { a: 1, b: 2 }
console.log(obj2); //Object { b: 2 }
console.log(obj); //Object { a: 1, b: 2 }
//如果目標物件與源物件有同名屬性,或與多個源物件有同名屬性,則後面的屬性會覆蓋前面的屬性
var obj1 = {a:1,b:1};
var obj2 = {b:2,c:2};
var obj = Object.assign(obj1,obj2);
console.log(obj1); //Object { a: 1, b: 2, c: 2 }
console.log(obj2); //Object { b: 2, c: 2 }
console.log(obj); //Object { a: 1, b: 2, c: 2 }
//多個物件合併
var obj1 = {a:1,b:1};
var obj2 = {b:2,c:2};
var obj3 = {c:3,d:3};
var obj = Object.assign(obj1,obj2,obj3);
console.log(obj1); //Object { a: 1, b: 2, c: 3, d: 3 }
console.log(obj2); //Object { b: 2, c: 2 }
console.log(obj3); //Object { c: 3, d: 3 }
console.log(obj); //Object { a: 1, b: 2, c: 3, d: 3 }
獲取物件的屬性名和屬性值
var obj = {a:1,b:2,c:3,d:4};
//可列舉就是可遍歷的意思,也就是說物件的屬性是否能夠通過遍歷得到
//1.Object.keys():用於返回物件可列舉的屬性名或方法名
//返回的結果是一個數組
var a = Object.keys(obj); //Array(4) [ "a", "b", "c", "d" ]
console.log(a);
//2.Object.values():用於返回物件可列舉的屬性值
//返回的結果是一個數組
var b = Object.values(obj); //Array(4) [ 1, 2, 3, 4 ]
console.log(b);
判斷屬性及銷燬物件
var obj = {a:1,b:2,c:3,d:4};
// 1.判斷物件中是否包含某個屬性: in操作符
var a = "b" in obj; //true 表示有這個屬性
var b = "f" in obj; //false 表示沒有這個屬性
alert(b);
// 2.銷燬物件,物件=null
console.log(obj); //Object { a: 1, b: 2, c: 3, d: 4 }
console.log(obj.b); //2
//銷燬obj這個物件
obj = null;
console.log(obj); //null
console.log(obj.b); //Uncaught TypeError: obj is null
15.json資料格式
json和js物件的相互轉換
var obj = {name:"小明",age:18}; //這是一個物件
var xm = '{"name":"小明","age":18}'; //這是一個JSON字串
//1.js物件轉json字串:使用JSON.stringify()方法
var xm_json = JSON.stringify(obj); //{"name":"小明","age":18}
console.log(xm_json);
console.log(typeof xm_json);
//2.json字串轉js物件:使用JSON.parse()方法
var xm_obj = JSON.parse(xm); //Object { name: "小明", age: 18 }
console.log(xm_obj);
alert(xm_obj.name);
篩選物件鍵值 處理完資料後轉成json字串,stringify(引數1,引數2,引數3)
var obj = {name:"小明",age:18,sex:"男",height:"1.8m"}; //這是一個物件
var xm = '{"name":"小明","age":18}'; //這是一個JSON字串
//1.js物件轉json字串:使用JSON.stringify()方法
//JSON.stringify()可以有3個引數
//引數1:要轉換的物件或陣列
//引數2(可選):陣列或函式
//如果引數2是一個數組,則僅轉換陣列中指定的屬性
//如果引數2是一個函式,則將呼叫該函式,並傳入每個成員的鍵和值給該函式
//引數3(可選):文字縮排,空格和換行符
var xm_json = JSON.stringify(obj); //{"name":"小明","age":18,"sex":"男","height":"1.8m"}
var xm_json = JSON.stringify(obj,['name','sex']); //{"name":"小明","sex":"男"}
var xm_json = JSON.stringify(obj,sex); //{"name":"小明","age":18,"sex":"女","height":"1.8m"}
function sex(key,value){
if(value == "男"){
return "女"
};
return value;
}
var xm_json = JSON.stringify(obj,null,6);
// {
// "name": "小明",
// "age": 18,
// "sex": "男",
// "height": "1.8m"
// }
傳入函式處理json鍵值 接收到json資料後處理轉成物件, parse(引數1,引數2)函式
//2.json字串轉js物件:使用JSON.parse()方法
//JSON.parse()可以有2個引數
//引數1:要轉換的JSON字串
//引數2(可選):在parse函式返回之前處理結果的函式,處理每個成員的鍵和值
//這是一個JSON字串
var xm = '{"name":"小明","age":18,"sex":"男","height":"1.8m"}';
var xm_obj = JSON.parse(xm,sex);
//Object { name: "小明", age: 18, sex: "女", height: "1.8m" }
function sex(key,value){
if(value == "男"){
return "女";
};
return value;
}
var xm_obj = JSON.parse(xm,nm);
//Object { name: "小紅", age: 18, sex: "男", height: "1.8m" }
//Object { name: "小明你好", age: 18, sex: "男", height: "1.8m" }
function nm(key,value){
if(key == "name"){
//return "小紅";
return value+"你好";//return的是value值
};
return value;
}
console.log(xm_obj);
document.write(xm_obj.name+"<br/>");
document.write(xm_obj.age+"<br/>");
document.write(xm_obj.sex+"<br/>");
document.write(xm_obj.height+"<br/>");
1.js物件轉json字串:使用JSON.stringify()方法
//JSON.stringify()可以有3個引數
//引數1:要轉換的物件或陣列
//引數2(可選):陣列或函式
//如果引數2是一個數組,則僅轉換陣列中指定的屬性
//如果引數2是一個函式,則將呼叫該函式,並傳入每個成員的鍵和值給該函式
//引數3(可選):文字縮排,空格和換行符
var xm_json = JSON.stringify(obj); //{“name”:“小明”,“age”:18,“sex”:“男”,“height”:“1.8m”}
var xm_json = JSON.stringify(obj,[‘name’,‘sex’]); //{“name”:“小明”,“sex”:“男”}
var xm_json = JSON.stringify(obj,sex); //{“name”:“小明”,“age”:18,“sex”:“女”,“height”:“1.8m”}
function sex(key,value){
if(value == “男”){
return “女”
};
return value;
}
var xm_json = JSON.stringify(obj,null,6);
// {
// “name”: “小明”,
// “age”: 18,
// “sex”: “男”,
// “height”: “1.8m”
// }
##### 傳入函式處理json鍵值 接收到json資料後處理轉成物件, parse(引數1,引數2)函式
```javascript
//2.json字串轉js物件:使用JSON.parse()方法
//JSON.parse()可以有2個引數
//引數1:要轉換的JSON字串
//引數2(可選):在parse函式返回之前處理結果的函式,處理每個成員的鍵和值
//這是一個JSON字串
var xm = '{"name":"小明","age":18,"sex":"男","height":"1.8m"}';
var xm_obj = JSON.parse(xm,sex);
//Object { name: "小明", age: 18, sex: "女", height: "1.8m" }
function sex(key,value){
if(value == "男"){
return "女";
};
return value;
}
var xm_obj = JSON.parse(xm,nm);
//Object { name: "小紅", age: 18, sex: "男", height: "1.8m" }
//Object { name: "小明你好", age: 18, sex: "男", height: "1.8m" }
function nm(key,value){
if(key == "name"){
//return "小紅";
return value+"你好";//return的是value值
};
return value;
}
console.log(xm_obj);
document.write(xm_obj.name+"<br/>");
document.write(xm_obj.age+"<br/>");
document.write(xm_obj.sex+"<br/>");
document.write(xm_obj.height+"<br/>");