物件
JS中的物件是屬性和行為的結合體,其中屬性是物件的靜態特征,行為又稱方法,是物件的動態特征,
JavaScript中的物件主要分為三大類:
- 內置物件
由ES標準中定義的物件 在任何的ES的實作中都可以使用,比如Math String Number Boolean Function Object - 宿主物件
由JS的運行環境提供的物件,目前來講主要是瀏覽器提供的物件,比如BOM DOM - 自定義物件
由開發人員自己創建的物件
物件的定義
定義非空物件
// 非空物件:
var 物件名 = {
屬性名: 值,
...
方法名: function([引數]){
方法體陳述句;
}
...
}
var p1 = {
color: '黑色',//給物件添加屬性
weight: '188g',//屬性之間用逗號隔開
screenSize: 6.5,
call: function(name){//給物件添加方法
console.log("打出電話:"+name);
},
sendMassage: function(msg){
console.log("發出的資訊是:"+msg);
},
playVideo: function(){
console.log("播放視頻");
},
playMusic: function(){
console.log("播放音樂");
}
}
console.log("手機顏色:"+p1['color']);//也可以使用 物件['屬性']來輸出屬性值
console.log("手機重量:"+p1.weight);
console.log("螢屏尺寸:"+p1.screenSize);
p1.call("張三");//呼叫物件的發方法
p1["sendMassage"]("helo");
p1.playVideo();
p1.playMusic();
console.log(p1);
使用new Object()創建物件
var p = new Object(); // 創建一個空物件p
p2.name = '劉備';
p2.sex = '男';
p2.age = 32;
p2.sayHello = function(){
console.log('Hello');
}
p2.sayHello();//呼叫物件的方法
可以使用建構式來創建物件:
語法: new 建構式名( )
function Student(name,sex,age){
this.name = name;//這里的this指向的是建構式新創建的物件
this.sex = sex;
this.age = age;
this.show = function(){
console.log("姓名:"+this.name)
console.log("姓別:"+this.sex)
console.log("年齡:"+this.age)
}
}
var s1 = new Student('喬峰','男',28);//s1為建構式創建的新物件 即實體
s1.show();
var s2 = new Student('段譽','男',23);
s2.show();
注意:"建構式"可以有引數,也可以沒有引數,如果沒有引數小括號可以省略
遍歷物件的成員
遍歷物件的屬性和方法:使用for…in回圈
for(var 變數名 in 物件名){
回圈陳述句
}
function Student(name,sex,age){
this.name = name;
this.sex = sex;
this.age = age;
this.show = function(){
console.log("姓名:"+this.name)
console.log("姓別:"+this.sex)
console.log("年齡:"+this.age)
}
}
// s2是要遍歷的物件
var s2 = new Student('段譽','男',23);
for(var k in s2){
console.log(k);//依次輸出 name sex age show()
console.log(s2[k]);//依次輸出 段譽 男 23
}
in運算子
判斷成員(屬性)在物件中是否存在,存在回傳true;不存在回傳false,
JS內置物件
JavaScript提供了很多常用的內置物件,包括數學物件Math、日期物件Date、陣列物件Array以及字串物件String等,
Math物件
Math物件:用來對數字進行與數學相關的運算,不需要實體化物件,可以直接使用其靜態屬性和靜態方法.
Math物件:不需要實體化
Math.PI:算數常量PI
Math.abs(x):回傳x的絕對值
Math.max(args...):回傳最大數
Math.min(args...):回傳最小數
Math.pow(x,y):回傳x的y次方
Math.sqrt(x):回傳x的算術平方根
Math.random():回傳0.0到1.0之間的亂數
Math.round(x):回傳最接近x的整數
Math.floor(x):回傳一個小于等于x 并且與它最接近的整數
Math.ceil(x):回傳一個大于等于x 并且與它最接近的整數
Date物件
Date物件:需要使用new Date()實體化物件才能使用,創建一個物件 Date()是一個建構式,可以給該建構式傳遞引數生成一個日期物件,


// 1.創建一個Date物件 沒有引數
var date1 = new Date();
console.log(date1);
// 2.傳入年 月 日 時 分 秒 創建一個指定日期時間的Date物件
// 月份是 0-11
var date2 = new Date(2021,4,22,10,17,55);
console.log(date2);
// 3.傳入一個日期和時間字串創建一個Date物件
var date3 = new Date("2021-5-22 18:19:25");
console.log(date3);
console.log(date3.getMonth())//4
console.log(date3.getTime())//表示Date物件距離1970年1月1日午夜之間的毫秒數
console.log(date1.toLocaleDateString())//2021/6/14
console.log(date1.toLocaleString())//2021/6/14 下午11:17:36
console.log(date1.getFullYear())//2021
陣列物件
陣列:是一些型別相同的資料的集合,它和普通的物件功能類似,也是用來存盤一些值,陣列是使用數字來作為索引操作內部的元素,
陣列的創建
- 使用字面量
var arr=[]//創建一個空陣列
- 使用new Array創建
var arr = new Array();//定義一個空陣列
判斷一個物件是不是陣列的兩種方法:
- isArray(物件名)
- instanceof: 物件名 instanceof Array
var arr = [];
var obj = {};
console.log(Array.isArray(arr));//true
console.log(Array.isArray(obj));//false
console.log(arr instanceof Array);//trrue

關于陣列的其他方法之前的文章要有詳細介紹,這里不多做解釋,
String物件
String物件:字串物件,必須使用new String()來創建
字串常用方法
- charAt(n) 回傳n位置上的字串
- concat(s1,s2,...) 連接多個字串
- charCodeAt(n) 回傳n位置上的ASCII碼
- split('分隔符') 將字串按給定的分隔符 轉換成字串陣列
- substr(start,length) 從start開始提取length個字符構成一個新串
- substring(from,to) 提取from和to之間的字串構成一個新串
- toLowerCase() 將串中的大寫字符轉換成小寫 不影響原字串 回傳一個新字串
- toUpperCase() 將串中的所有小寫轉換成大寫 不影響原字串 回傳一個新字串
- replace(str1,str2) 使用str2替換字串中的str1 回傳替換結果 不影響原字串
字串物件練習
// 輸入一個由字母組成的字串,統計串中每個字母出現的次數
var str = 'abBSdXbdea';
var lower = new Array(26);// 存放26個小寫字母各自出現的次數
var upper = new Array(26);// 存放26個大寫字母各自出現的次數
// 初始化兩個陣列
for(var i=0;i<lower.length;i++){
lower[i] = 0
upper[i] = 0
}
for(var k=0;k<str.length;k++){
if(str.charAt(k)>='a' && str.charAt(k)<='z'){
lower[str.charCodeAt(k)-97]++
}else if(str.charAt(k)>='A' && str.charAt(k)<='Z'){
upper[str.charCodeAt(k)-65]++
}
}
console.log(lower);
console.log(upper);
/* 輸入一個十進制整數和一個數制(2、8、16)將該十進制整數轉換成
對應的數值格式輸出
取余法:
m=15 k=8
m%k 將余數存放在陣列中
*/
var m = parseInt(prompt('請輸入一個整數:'));
var k = parseInt(prompt('請輸入一個數制(2~16)'));
var result = ['0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'];
var arr = new Array();//存放數制轉換的結果
var i = 0;
while(m!=0){//對m進行數制轉換 將余數放在arr陣列里
arr[i] = m%k;
m = parseInt(m/k);
i++;
}
var str = '';
if(k==8){
str = '0';
}else if(k==16){
str = '0x';
}
for(var i=arr.length-1;i>=0;i--){
str += result[arr[i]];
}
console.log('轉換的結果為:'+str);
值型別和參考型別
值型別: 簡單的資料型別(字串,數值型,布爾型,undefined,null)
參考型別: 復雜資料型別(物件) 變數中保存的是參考的地址
注意: 參考型別的特點是,變數中保存的僅僅是一個參考的地址,當對變數進行賦值時,并不是將物件復制了一份,而是將兩個變數指向了同一個物件的參考,
下面對記憶體中的堆疊和堆進行分析
堆疊(stack):會自動分配記憶體空間,會自動釋放,簡單資料型別存放到堆疊里面,
堆(heap):動態分配的記憶體,大小不定也不會自動釋放,復雜資料型別存放到堆里面,

由此可見存放在堆記憶體中的物件,變數實際保存的是一個指標,這個指標指向另一個位置,通過這個指標來尋找堆中存盤的物件的屬性和值,并且每個空間大小不一樣,要根據情況開進行特定的分配,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/287747.html
標籤:其他
上一篇:深拷貝和原型原型鏈(面事題)
