javascript,檢測object物件中是否存在某個屬性

舞動乾坤發表於2017-10-21

擼js基礎之物件:http://www.ferecord.com/lujs-object.html

繼之前js中陣列的常用方法之後,Object的常用方法和屬性也是很常用的。故,總結之。 
一、屬性 
Object自帶一個prototype的屬性,即Object.prototype,Object.prototype本身也是一個物件,也會有一些屬性和方法。如下: 
1、屬性 
Object.prototype.writable:預設為false 
Object.prototype.enumerable:預設為false 
Object.prototype.configurable:預設為false 
Object.prototype.constructor:用於建立一個物件的原型。 
2、常用方法 
Object.prototype.hasOwnProperty():返回一個布林值,表示某個物件是否含有指定的屬性,而且此屬性非原型鏈繼承。
Object.prototype.isPrototypeOf():返回一個布林值,表示指定的物件是否在本物件的原型鏈中。
Object.prototype.propertyIsEnumerable():判斷指定屬性是否可列舉。
Object.prototype.toString():返回物件的字串表示。
Object.prototype.watch():給物件的某個屬性增加監聽。
Object.prototype.unwatch():移除物件某個屬性的監聽。
Object.prototype.valueOf():返回指定物件的原始值。
二、方法 
Object.assign(target, …sources):把任意多個的源物件自身的可列舉屬性拷貝給目標物件,然後返回目標物件。
Object.create(proto,[propertiesobject]):建立一個擁有指定原型和若干個指定屬性的物件。
Object.defineProperties(obj, props):在一個物件上新增或修改一個或者多個自有屬性,並返回該物件。
Object.defineProperty(obj, prop, descriptor):直接在一個物件上定義一個新屬性,或者修改一個已經存在的屬性, 並返回這個物件。obj:需要定義屬性的物件。prop:需定義或修改的屬性的名字。descriptor:將被定義或修改的屬性的描述符。
Object.entries(obj):返回一個包含由給定物件所有可列舉屬性的屬性名和屬性值組成的 [屬性名,屬性值] 鍵值對的陣列,陣列中鍵值對的排列順序和使用forin迴圈遍歷該物件時返回的順序一致。 
舉例: 
var obj = { foo: “bar”, baz: 42 }; 
console.log(Object.entries(obj)); // [ [‘foo’, ‘bar’], [‘baz’, 42] ]
Object.freeze(obj):凍結一個物件,凍結指的是不能向這個物件新增新的屬性,不能修改其已有屬性的值,不能刪除已有屬性,以及不能修改該物件已有屬性的可列舉性、可配置性、可寫性。也就是說,這個物件永遠是不可變的。該方法返回被凍結的物件。
Object.getOwnPropertyDescriptor(obj, prop):返回指定物件上一個自有屬性對應的屬性描述符。
Object.getOwnPropertyNames(obj):返回一個由指定物件的所有自身屬性的屬性名(包括不可列舉屬性)組成的陣列。 
舉例: 
// 類陣列物件 
var obj = { 0: “a”, 1: “b”, 2: “c”}; 
console.log(Object.getOwnPropertyNames(obj).sort()); // [“0”, “1”, “2”]
Object.getPrototypeOf(object):返回該物件的原型。
Object.is(value1, value2):判斷兩個值是否是同一個值。
Object.isExtensible(obj):判斷一個物件是否是可擴充套件的(是否可以在它上面新增新的屬性)。
Object.isFrozen(obj):判斷一個物件是否被凍結(frozen)。
Object.isSealed(obj):判斷一個物件是否是密封的(sealed)。密封物件是指那些不可 擴充套件 的,且所有自身屬性都不可配置的(non-configurable)且屬性不可刪除的物件(其可以是可寫的)。
Object.keys(obj):返回一個由給定物件的所有可列舉自身屬性的屬性名組成的陣列,陣列中屬性名的排列順序和使用for-in迴圈遍歷該物件時返回的順序一致 
舉例: 
var arr = [“a”, “b”, “c”]; 
alert(Object.keys(arr)); // 彈出”0,1,2”
// 類陣列物件 
var obj = { 0 : “a”, 1 : “b”, 2 : “c”}; 
alert(Object.keys(obj)); // 彈出”0,1,2”
Object.preventExtensions(obj):讓一個物件變的不可擴充套件,也就是永遠不能再新增新的屬性。
Object.setPrototypeOf(obj, prototype):將一個指定的物件的原型設定為另一個物件或者null
Object.values(obj):返回一個包含指定物件所有的可列舉屬性值的陣列,陣列中的值順序和使用forin迴圈遍歷的順序一樣。 
舉例: 
var obj = { foo: “bar”, baz: 42 }; 
console.log(Object.values(obj)); // [‘bar’, 42]







function Site(){
    this.name = "CodePlayer";
    this.url = "http://www.365mini.com/";

    this.sayHello = function(){
        document.writeln("歡迎來到" + this.name);
    };}
var s =  new Site();
document.writeln( Site.prototype.isPrototypeOf(s) ); // true



1.1 字串
判斷是否包含某個字串
indexOf方法中,找到相關字串會返回第一次出現的下標。沒有找到就會返回-1,利用這個特性可以判斷字串是否存在。

console.log('Fine'.indexOf('in') !== -1)  // true

把字串按照一定規則分離成陣列
下面是以空格為分割標誌。

console.log('I seek you'.split(' '))  // ["I", "seek", "you"]

複製指定位置的字串
傳入的兩個引數分別是開始的位置和結束的標記。看清楚,第二個引數本身的小標所表示的內容不會被複制,第二個引數是用來標記,這裡是結束位置。

console.log('I seek you'.slice(2,6))  // seek
console.log('I seek you'.substring(2,6))  // seek

拼接字串

console.log('I seek you'.concat(' too.'))  // I seek you too.

檢視字串中的字元

console.log('I seek you'[0])  // I
console.log('I seek you'.charAt(0))  // I

1.2 物件
判斷屬性是自己的還是繼承來的
使用in不能判斷屬性是自己的還是繼承來的,使用hasOwnProperty可以。

var xiaoming = {
  name: 'xiaoming'
}
使用in不能判斷屬性是自己的還是繼承來的
---------------------------------
'name' in xiaoming  // true
'toString' in xiaoming  // true
---------------------------------
xiaoming.hasOwnProperty('name')  // true
xiaoming.hasOwnProperty('toString')  // false

判斷物件是否可列舉

xiaoming.propertyIsEnumerable()  // false

判斷物件是另一個物件的原型

var People = function (name) {
    this.name = name
}
var xiaoming = new People('xiaoming')


Human.prototype = monkey
monkey.isPrototypeOf(man)

1.3 原型
__proto__是例項物件的屬性
prototype是建構函式的屬性
constructor指向建構函式IE中不存在__proto__,推薦使用ES5的Object.getPropertyOf()訪問。

typeof [].__proto__  // "object"
Object.getPrototypeOf([])  // [constructor: function, toString: function, toLocaleString: function, join: function, pop: function…]
[].constructor.prototype

原型繼承

var People = function (name,age) {
  this.name = name
  this.age = age
}
xiaoming = People.prototype
xiaoming.constructor = xiaoming複製程式碼

javascript,檢測object物件中是否存在某個屬性

比較兩個物件是否是屬性值相等:

var obj1 = {
    name: "Benjamin",
    sex : "male"
}

var obj2 = {
    name: "Benjamin",
    sex : "male"
}
console.log("obj1 == obj2 :");
console.log(obj1 == obj2);
function isObjectValueEqual(a, b) {
        var aProps = Object.getOwnPropertyNames(a);
        var bProps = Object.getOwnPropertyNames(b);
        console.log("aProps"); console.log(aProps);
        console.log("bProps"); console.log(bProps);
        if (aProps.length != bProps.length) {
            return false;
        }
        for (var i = 0; i < aProps.length; i++) {
            var propName = aProps[i];
            if (a[propName] !== b[propName]) {
                return false;
            }
        }
        return true;
    }
console.log( "isObjectValueEqual(obj1,obj2):");
console.log( isObjectValueEqual(obj1,obj2));
複製程式碼


javascript,檢測object物件中是否存在某個屬性

檢測物件中屬性的存在與否可以通過幾種方法來判斷。

1.使用in關鍵字。

該方法可以判斷物件的自有屬性和繼承來的屬性是否存在。

var o={x:1};
"x" in o;            //true,自有屬性存在
"y" in o;            //false
"toString" in o;     //true,是一個繼承屬性複製程式碼

2.使用物件的hasOwnProperty()方法。

該方法只能判斷自有屬性是否存在,對於繼承屬性會返回false。

var o={x:1};
o.hasOwnProperty("x");       //true,自有屬性中有x
o.hasOwnProperty("y");       //false,自有屬性中不存在y
o.hasOwnProperty("toString"); //false,這是一個繼承屬性,但不是自有屬性複製程式碼

3.用undefined判斷

自有屬性和繼承屬性均可判斷。

var o={x:1};
o.x!==undefined;        //true
o.y!==undefined;        //false
o.toString!==undefined  //true
複製程式碼

該方法存在一個問題,如果屬性的值就是undefined的話,該方法不能返回想要的結果,如下。

var o={x:undefined};
o.x!==undefined;        //false,屬性存在,但值是undefined
o.y!==undefined;        //false
o.toString!==undefined  //true複製程式碼

4.在條件語句中直接判斷

var o={};
if(o.x) o.x+=1;  //如果x是undefine,null,false," ",0或NaN,它將保持不變複製程式碼



神奇的 Object.defineProperty

這個方法了不起啊。。vue.js和avalon.js 都是通過它實現雙向繫結的。。而且Object.observe也被草案發起人撤回了。。所以defineProperty更有必要了解一下了幾行程式碼看他怎麼用

    var a= {}
    Object.defineProperty(a,"b",{
      value:123
    })
    console.log(a.b);//123複製程式碼

很簡單,,它接受三個引數,而且都是必填的。。

傳入引數

第一個引數:目標物件

第二個引數:需要定義的屬性或方法的名字。

第三個引數:目標屬性所擁有的特性。(descriptor)

前兩個引數不多說了,一看程式碼就懂,主要看第三個引數descriptor,看看有哪些取值

descriptor

他又以下取值,我們簡單認識一下,後面例子,挨個介紹,

value:屬性的值(不用多說了)

writable:如果為false,屬性的值就不能被重寫,只能為只讀了

configurable:總開關,一旦為false,就不能再設定他的(value,writable,configurable)

enumerable:是否能在for...in迴圈中遍歷出來或在Object.keys中列舉出來。

get:一會細說

set:一會細說

descriptor預設值

我們再看看第一個例子

    var a= {}
    Object.defineProperty(a,"b",{
      value:123
    })
    console.log(a.b);//123複製程式碼

我們只設定了 value,別的並沒有設定,但是 第一次的時候 可以簡單的理解為(暫時這樣理解)它會預設幫我們把writable,configurable,enumerable。都設上值,而且值還都是false。。也就是說,上面程式碼和下面是等價的的( 僅限於第一次設定的時候

var a= {}
Object.defineProperty(a,"b",{
  value:123,
  writable:false,
  enumerable:false,
  configurable:false
})
console.log(a.b);//123複製程式碼

以上非常重要哦。。並且以上理解對set 和 get 不起作用哦configurable

總開關,第一次設定 false 之後,,第二次什麼設定也不行了,比如說

var a= {}
Object.defineProperty(a,"b",{
  configurable:false
})
Object.defineProperty(a,"b",{
  configurable:true
})
//error: Uncaught TypeError: Cannot redefine property: b複製程式碼

就會報錯了。。注意上面講的預設值。。。如果第一次不設定它會怎樣。。會幫你設定為false。。所以。。第二次。再設定他會怎樣?。。對嘍,,會報錯

writable

如果設定為fasle,就變成只讀了。。

var a = {}; 

Object.defineProperty(o, "b", { 
    value : 123,
    writable : false });

console.log(a.b); // 列印 37
a.b = 25; // 沒有錯誤丟擲(在嚴格模式下會丟擲,即使之前已經有相同的值)
console.log(o.a); // 列印 37, 賦值不起作用。複製程式碼

enumerable

屬性特性 enumerable 定義了物件的屬性是否可以在 for...in 迴圈和 Object.keys() 中被列舉。

var a= {}
Object.defineProperty(a,"b",{
  value:3445,
  enumerable:true
})
console.log(Object.keys(a));// 列印["b"]複製程式碼

改為false

var a= {}
Object.defineProperty(a,"b",{
  value:3445,
  enumerable:false //注意咯這裡改了
})
console.log(Object.keys(a));// 列印[]複製程式碼

for...in 類似,,不贅述了

set 和 get

在 descriptor 中不能 同時 設定訪問器 (get 和 set) 和 wriable 或 value,否則會錯,就是說想用(get 和 set),就不能用(wriable 或 value中的任何一個)

set 和 get ,他倆幹啥用的的,

var a= {}
Object.defineProperty(a,"b",{
  set:function(newValue){
    console.log("你要賦值給我,我的新值是"+newValue)
    },
  get:function(){
    console.log("你取我的值")
    return 2 //注意這裡,我硬編碼返回2
   }
})
a.b =1 //列印 你要賦值給我,我的新值是1
console.log(a.b)    //列印 你取我的值
                    //列印 2    注意這裡,和我的硬編碼相同的複製程式碼

簡單來說,, 這個 “b” 賦值 或者 取值的時候會分別觸發 set 和 get 對應的函式

這就是實現 observe的關鍵啊。。下一篇,,我會分析vue的observe的實現原始碼,聊聊自己如何一步一步實現$watch

var a = {
  b: {
    c:1
  },
  d:1
  
}
a.$watch("b.c",()=>console.log("哈哈哈"))複製程式碼

待續ing。。。。。



原生JavaScript中物件相關API合集-物件篇

Object物件

生成例項物件
var o = new Object()
屬性
Object.prototype //返回原型物件
複製程式碼
方法
Object.keys(o)   //遍歷物件的可列舉屬性
Object.getOwnPropertyName(o)   //遍歷物件不可列舉的屬性物件例項的方法
valueOf // 返回當前物件對應的值。  
toString // 返回當前物件對應的字串形式。  
toLocaleString // 返回當前物件對應的本地字串形式。  
hasOwnProperty // 判斷某個屬性是否為當前物件自身的屬性,還是繼承自原型物件的屬性。 
isPrototypeOf // 判斷當前物件是否為另一個物件的原型。
propertyIsEnumerable // 判斷某個屬性是否可列舉。Array物件
生成例項物件
var a = new Array()屬性
a.length  // 長度Array.isArray()
Array.isArray(a)   // 用來判斷一個值是否為陣列Array例項的方法
a.valueof()   // 返回陣列本身
a.toString()  // 返回陣列的字串形式
a.push(value,vlaue....)   // 用於在陣列的末端新增一個或多個元素,並返回新增新元素後的陣列長度。
pop()   // 用於刪除陣列的最後一個元素,並返回該元素
join()  // 以引數作為分隔符,將所有陣列成員組成一個字串返回。如果不提供引數,預設用逗號分隔。
concat()  // 用於多個陣列的合併。它將新陣列的成員,新增到原陣列的尾部,然後返回一個新陣列,原陣列不變。
shift()  // 用於刪除陣列的第一個元素,並返回該元素。
unshift(value)  // 用於在陣列的第一個位置新增元素,並返回新增新元素後的陣列長度。
reverse()   // 用於顛倒陣列中元素的順序,返回改變後的陣列
slice(start_index, upto_index);   // 用於提取原陣列的一部分,返回一個新陣列,原陣列不變。第一個引數為起始位置(從0開始),
第二個引數為終止位置(但該位置的元素本身不包括在內)。如果省略第二個引數,則一直返回到原陣列的最後一個成員。負數表示倒數第幾個。
splice(index, count_to_remove, addElement1, addElement2, ...);   // 用於刪除原陣列的一部分成員,
並可以在被刪除的位置新增入新的陣列成員,返回值是被刪除的元素。第一個引數是刪除的起始位置,第二個引數是被刪除的元素個數。如果後面還有更多的引數,則表示這些就是要被插入陣列的新元素。
sort()   // 對陣列成員進行排序,預設是按照字典順序排序。排序後,原陣列將被改變。如果想讓sort方法按照自定義方式排序,可以傳入一個函式作為引數,表示按照自定義方法進行排序。該函式本身又接受兩個引數,表示進行比較的兩個元素。如果返回值大於0,表示第一個元素排在第二個元素後面;其他情況下,都是第一個元素排在第二個元素前面。
map()   // 對陣列的所有成員依次呼叫一個函式,根據函式結果返回一個新陣列。
map(elem,index,arr)   // map方法接受一個函式作為引數。該函式呼叫時,map方法會將其傳入三個引數,分別是當前成員、當前位置和陣列本身。
forEach()   // 遍歷陣列的所有成員,執行某種操作,引數是一個函式。它接受三個引數,分別是當前位置的值、當前位置的編號和整個陣列。
filter()   // 引數是一個函式,所有陣列成員依次執行該函式,返回結果為true的成員組成一個新陣列返回。該方法不會改變原陣列。
some()    // 用來判斷陣列成員是否符合某種條件。接受一個函式作為引數,所有陣列成員依次執行該函式,返回一個布林值。該函式接受三個引數,依次是當前位置的成員、當前位置的序號和整個陣列。只要有一個陣列成員的返回值是true,則整個some方法的返回值就是true,否則false。
every()   // 用來判斷陣列成員是否符合某種條件。接受一個函式作為引數,所有陣列成員依次執行該函式,返回一個布林值。該函式接受三個引數,依次是當前位置的成員、當前位置的序號和整個陣列。所有陣列成員的返回值都是true,才返回true,否則false。
reduce()   // 依次處理陣列的每個成員,最終累計為一個值。從左到右處理(從第一個成員到最後一個成員)
reduceRight()  // 依次處理陣列的每個成員,最終累計為一個值。從右到左(從最後一個成員到第一個成員)
indexOf(s)   // 返回給定元素在陣列中第一次出現的位置,如果沒有出現則返回-1。可以接受第二個引數,表示搜尋的開始位置
lastIndexOf()  // 返回給定元素在陣列中最後一次出現的位置,如果沒有出現則返回-1。


Number物件
生成物件
var n = new Number()Number物件的屬性
Number.POSITIVE_INFINITY // 正的無限,指向Infinity。  
Number.NEGATIVE_INFINITY // 負的無限,指向-Infinity。  
Number.NaN // 表示非數值,指向NaN。  
Number.MAX_VALUE // 表示最大的正數,相應的,最小的負數為-Number.MAX_VALUE。  
Number.MIN_VALUE // 表示最小的正數(即最接近0的正數,在64位浮點數體系中為5e-324),相應的,最接近0的負數為-Number.MIN_VALUE。  
Number.MAX_SAFE_INTEGER // 表示能夠精確表示的最大整數,即9007199254740991。  
Number.MIN_SAFE_INTEGER // 表示能夠精確表示的最小整數,即-9007199254740991。
複製程式碼
Number物件例項的方法
toString()   // 用來將一個數值轉為字串形式.可以接受一個引數,表示輸出的進位制。如果省略這個引數,預設將數值先轉為十進位制,再輸出字串;否則,就根據引數指定的進位制,將一個數字轉化成某個進位制的字串。
toFixed()   // 用於將一個數轉為指定位數的小數,返回這個小數對應的字串。
toExponential()  // 用於將一個數轉為科學計數法形式。可傳入一個引數,參數列示小數點後有效數字的位數,範圍為0到20,超出這個範圍,會丟擲一個RangeError。
toPrecision()  // 用於將一個數轉為指定位數的有效數字。
複製程式碼
String 物件
生成例項物件
var s = new String()String物件的屬性
s.length   //返回字串的長度方法
s.chatAt(index)   // 返回指定位置的字元
s.fromCharCode()    // 該方法的引數是一系列Unicode碼點,返回對應的字串。
s.charCodeAt(index)    // 返回給定位置字元的Unicode碼點(十進位制表示)
s.concat(s2)  // 用於連線兩個字串
s.slice(start,end)   // 用於從原字串取出子字串並返回,不改變原字串。第一個引數是子字串的開始位置,第二個引數是子字串的結束位置(不含該位置)。如果引數是負值,表示從結尾開始倒數計算的位置,即該負值加上字串長度。
s.substring(start,end)  // 用於從原字串取出子字串並返回,不改變原字串.第一個參數列示子字串的開始位置,第二個位置表示結束位置。
s.substr(start,length)   // 用於從原字串取出子字串並返回,不改變原字串。第一個引數是子字串的開始位置,第二個引數是子字串的長度。如果第一個引數是負數,表示倒數計算的字元位置。如果第二個引數是負數,將被自動轉為0,因此會返回空字串。
s.indexOf(s)   // 返回給定元素在字串中第一次出現的位置,如果沒有出現則返回-1。可以接受第二個引數,表示搜尋的開始位置 
s.lastIndexOf()  // 返回給定元素在字串中最後一次出現的位置,如果沒有出現則返回-1。
s.trim()  // 用於去除字串兩端的空格,返回一個新字串
s.toLowerCase()  // 用於將一個字串全部轉為小寫,返回一個新字串,不改變原字串。
s.toUpperCase()  // 全部轉為大寫
s.localeCompare(s2)  // 用於比較兩個字串。它返回一個整數,如果小於0,表示第一個字串小於第二個字串;如果等於0,表示兩者相等;如果大於0,表示第一個字串大於第二個字串。
s.match(regexp)   // 用於確定原字串是否匹配某個子字串,返回一個陣列,成員為匹配的第一個字串。如果沒有找到匹配,則返回null。
s.search()  // 返回值為匹配的第一個位置。如果沒有找到匹配,則返回-1。
s.replace(oldValue,newValue)  // 用於替換匹配的子字串,一般情況下只替換第一個匹配(除非使用帶有g修飾符的正規表示式)。
s.split()  // 按照給定規則分割字串,返回一個由分割出來的子字串組成的陣列。還可傳入第二個引數,決定了返回陣列的成員數。


Math物件
屬性
Math.E  // 常數e。  
Math.LN2  // 2的自然對數。  
Math.LN10  // 10的自然對數。  
Math.LOG2E  // 以2為底的e的對數。  
Math.LOG10E  // 以10為底的e的對數。  
Math.PI  // 常數Pi。  
Math.SQRT1_2  // 0.5的平方根。  
Math.SQRT2  // 2的平方根。
複製程式碼
數學方法
Math.abs()  // 返回引數的絕對值  
Math.ceil()  // 向上取整,接受一個引數,返回大於該引數的最小整數。 
Math.floor()  // 向下取整  
Math.max(n,n1,...)  // 可接受多個引數,返回最大值  
Math.min(n,n1,..)  // 可接受多個引數,返回最小值  
Math.pow(n,e)  // 指數運算, 返回以第一個引數為底數、第二個引數為冪的指數值。 
Math.sqrt()  // 返回引數值的平方根。如果引數是一個負值,則返回NaN。  
Math.log()  // 返回以e為底的自然對數值。
Math.exp()  // 返回e的指數,也就是常數e的引數次方。
Math.round()  // 四捨五入  
Math.random()  //返回0到1之間的一個偽隨機數,可能等於0,但是一定小於1。
複製程式碼
三角函式方法
Math.sin()  // 返回引數的正弦  
Math.cos()  // 返回引數的餘弦  
Math.tan()  // 返回引數的正切  
Math.asin()  // 返回引數的反正弦(弧度值)  
Math.acos()  // 返回引數的反餘弦(弧度值)  
Math.atan()  // 返回引數的反正切(弧度值)


SON物件
方法
JSON.stringify()   
//用於將一個值轉為字串。該字串應該符合JSON格式,並且可以被JSON.parse方法還原。
//(JSON.stringify(obj, selectedProperties))還可以接受一個陣列,作為第二個引數,指定需要轉成字串的屬性。
// 還可以接受第三個引數,用於增加返回的JSON字串的可讀性。如果是數字,表示每個屬性前面新增的空格(最多不超過10個);如果是字串(不超過10個字元),則該字串會新增在每行前面。

JSON.parse()   //用於將JSON字串轉化成物件。
複製程式碼
console物件
方法
console.log(text,text2,...)   // 用於在console視窗輸出資訊。它可以接受多個引數,將它們的結果連線起來輸出。如果第一個引數是格式字串(使用了格式佔位符),console.log方法將依次用後面的引數替換佔位符,然後再進行輸出。

console.info()   // 在console視窗輸出資訊,同時,會在輸出資訊的前面,加上一個藍色圖示。

console.debug()  // 在console視窗輸出資訊,同時,會在輸出資訊的前面,加上一個藍色圖示。

console.warn()  // 輸出資訊時,在最前面加一個黃色三角,表示警告;

console.error()  // 輸出資訊時,在最前面加一個紅色的叉,表示出錯,同時會顯示錯誤發生的堆疊

console.table()  // 可以將複合型別的資料轉為表格顯示。

console.count()  // 用於計數,輸出它被呼叫了多少次。

console.dir()    // 用來對一個物件進行檢查(inspect),並以易於閱讀和列印的格式顯示。

console.dirxml()  // 用於以目錄樹的形式,顯示DOM節點。

console.assert()  // 接受兩個引數,第一個引數是表示式,第二個引數是字串。只有當第一個引數為false,才會輸出第二個引數,否則不會有任何結果。

// 這兩個方法用於計時,可以算出一個操作所花費的準確時間。
console.time()
console.timeEnd()
// time方法表示計時開始,timeEnd方法表示計時結束。它們的引數是計時器的名稱。呼叫timeEnd方法之後,console視窗會顯示“計時器名稱: 所耗費的時間”。

console.profile()  // 用來新建一個效能測試器(profile),它的引數是效能測試器的名字。

console.profileEnd()  // 用來結束正在執行的效能測試器。

console.group()
console.groupend()
// 上面這兩個方法用於將顯示的資訊分組。它只在輸出大量資訊時有用,分在一組的資訊,可以用滑鼠摺疊/展開。
console.groupCollapsed()  // 用於將顯示的資訊分組,該組的內容,在第一次顯示時是收起的(collapsed),而不是展開的。

console.trace()  // 顯示當前執行的程式碼在堆疊中的呼叫路徑。
console.clear()  // 用於清除當前控制檯的所有輸出,將游標回置到第一行。複製程式碼


相關文章