日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

linq结果转换object_【JavaScript 教程】标准库—Object 对象

發布時間:2025/3/15 javascript 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linq结果转换object_【JavaScript 教程】标准库—Object 对象 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

作者 | 阮一峰

1、概述

JavaScript 原生提供Object對象(注意起首的O是大寫),本章介紹該對象原生的各種方法。

JavaScript 的所有其他對象都繼承自Object對象,即那些對象都是Object的實例。

Object對象的原生方法分成兩類:Object本身的方法與Object的實例方法。

(1)Object對象本身的方法

所謂“本身的方法”就是直接定義在Object對象的方法。

Object.print = function (o) { console.log(o) };

上面代碼中,print方法就是直接定義在Object對象上。

(2)Object的實例方法

所謂實例方法就是定義在Object原型對象Object.prototype上的方法。它可以被Object實例直接使用。

Object.prototype.print = function () {console.log(this);
};var obj = new Object();
obj.print() // Object

上面代碼中,Object.prototype定義了一個print方法,然后生成一個Object的實例obj。obj直接繼承了Object.prototype的屬性和方法,可以直接使用obj.print調用print方法。也就是說,obj對象的print方法實質上就是調用Object.prototype.print方法。

關于原型對象object.prototype的詳細解釋,參見《面向對象編程》章節。這里只要知道,凡是定義在Object.prototype對象上面的屬性和方法,將被所有實例對象共享就可以了。

以下先介紹Object作為函數的用法,然后再介紹Object對象的原生方法,分成對象自身的方法(又稱為“靜態方法”)和實例方法兩部分。

2、Object()

Object本身是一個函數,可以當作工具方法使用,將任意值轉為對象。這個方法常用于保證某個值一定是對象。

如果參數為空(或者為undefined和null),Object()返回一個空對象。

var obj = Object();// 等同于var obj = Object(undefined);var obj = Object(null);
obj instanceof Object // true

上面代碼的含義,是將undefined和null轉為對象,結果得到了一個空對象obj。

instanceof運算符用來驗證,一個對象是否為指定的構造函數的實例。obj instanceof Object返回true,就表示obj對象是Object的實例。

如果參數是原始類型的值,Object方法將其轉為對應的包裝對象的實例(參見《原始類型的包裝對象》一章)。

var obj = Object(1);
obj instanceof Object // true
obj instanceof Number // truevar obj = Object('foo');
obj instanceof Object // true
obj instanceof String // truevar obj = Object(true);
obj instanceof Object // true
obj instanceof Boolean // true

上面代碼中,Object函數的參數是各種原始類型的值,轉換成對象就是原始類型值對應的包裝對象。

如果Object方法的參數是一個對象,它總是返回該對象,即不用轉換。

var arr = [];var obj = Object(arr); // 返回原數組
obj === arr // truevar value = {};var obj = Object(value) // 返回原對象
obj === value // truevar fn = function () {};var obj = Object(fn); // 返回原函數
obj === fn // true

利用這一點,可以寫一個判斷變量是否為對象的函數。

function isObject(value) {return value === Object(value);
}
isObject([]) // true
isObject(true) // false

3、Object 構造函數

Object不僅可以當作工具函數使用,還可以當作構造函數使用,即前面可以使用new命令。

Object構造函數的首要用途,是直接通過它來生成新對象。

var obj = new Object();

注意,通過var obj = new Object()的寫法生成新對象,與字面量的寫法var obj = {}是等價的。或者說,后者只是前者的一種簡便寫法。

Object構造函數的用法與工具方法很相似,幾乎一模一樣。使用時,可以接受一個參數,如果該參數是一個對象,則直接返回這個對象;如果是一個原始類型的值,則返回該值對應的包裝對象(詳見《包裝對象》一章)。

var o1 = {a: 1};var o2 = new Object(o1);
o1 === o2 // truevar obj = new Object(123);
obj instanceof Number // true

雖然用法相似,但是Object(value)與new Object(value)兩者的語義是不同的,Object(value)表示將value轉成一個對象,new Object(value)則表示新生成一個對象,它的值是value。

4、Object 的靜態方法

所謂“靜態方法”,是指部署在Object對象自身的方法。

4.1、Object.keys(),Object.getOwnPropertyNames()

Object.keys方法和Object.getOwnPropertyNames方法都用來遍歷對象的屬性。

Object.keys方法的參數是一個對象,返回一個數組。該數組的成員都是該對象自身的(而不是繼承的)所有屬性名。

var obj = {p1: 123,p2: 456
};Object.keys(obj) // ["p1", "p2"]

Object.getOwnPropertyNames方法與Object.keys類似,也是接受一個對象作為參數,返回一個數組,包含了該對象自身的所有屬性名。

var obj = {p1: 123,p2: 456
};Object.getOwnPropertyNames(obj) // ["p1", "p2"]

對于一般的對象來說,Object.keys()和Object.getOwnPropertyNames()返回的結果是一樣的。只有涉及不可枚舉屬性時,才會有不一樣的結果。Object.keys方法只返回可枚舉的屬性(詳見《對象屬性的描述對象》一章),Object.getOwnPropertyNames方法還返回不可枚舉的屬性名。

var a = ['Hello', 'World'];Object.keys(a) // ["0", "1"]Object.getOwnPropertyNames(a) // ["0", "1", "length"]

上面代碼中,數組的length屬性是不可枚舉的屬性,所以只出現在Object.getOwnPropertyNames方法的返回結果中。

由于 JavaScript 沒有提供計算對象屬性個數的方法,所以可以用這兩個方法代替。

var obj = {p1: 123,p2: 456
};Object.keys(obj).length // 2Object.getOwnPropertyNames(obj).length // 2

一般情況下,幾乎總是使用Object.keys方法,遍歷對象的屬性。

4.2、其他方法

除了上面提到的兩個方法,Object還有不少其他靜態方法,將在后文逐一詳細介紹。

(1)對象屬性模型的相關方法

  • Object.getOwnPropertyDescriptor():獲取某個屬性的描述對象。

  • Object.defineProperty():通過描述對象,定義某個屬性。

  • Object.defineProperties():通過描述對象,定義多個屬性。

(2)控制對象狀態的方法

  • Object.preventExtensions():防止對象擴展。

  • Object.isExtensible():判斷對象是否可擴展。

  • Object.seal():禁止對象配置。

  • Object.isSealed():判斷一個對象是否可配置。

  • Object.freeze():凍結一個對象。

  • Object.isFrozen():判斷一個對象是否被凍結。

(3)原型鏈相關方法

  • Object.create():該方法可以指定原型對象和屬性,返回一個新的對象。

  • Object.getPrototypeOf():獲取對象的Prototype對象。

5、Object 的實例方法

除了靜態方法,還有不少方法定義在Object.prototype對象。它們稱為實例方法,所有Object的實例對象都繼承了這些方法。

Object實例對象的方法,主要有以下六個。

  • Object.prototype.valueOf():返回當前對象對應的值。

  • Object.prototype.toString():返回當前對象對應的字符串形式。

  • Object.prototype.toLocaleString():返回當前對象對應的本地字符串形式。

  • Object.prototype.hasOwnProperty():判斷某個屬性是否為當前對象自身的屬性,還是繼承自原型對象的屬性。

  • Object.prototype.isPrototypeOf():判斷當前對象是否為另一個對象的原型。

  • Object.prototype.propertyIsEnumerable():判斷某個屬性是否可枚舉。

本節介紹前四個方法,另外兩個方法將在后文相關章節介紹。

5.1、Object.prototype.valueOf()

valueOf方法的作用是返回一個對象的“值”,默認情況下返回對象本身。

var obj = new Object();
obj.valueOf() === obj // true

上面代碼比較obj.valueOf()與obj本身,兩者是一樣的。

valueOf方法的主要用途是,JavaScript 自動類型轉換時會默認調用這個方法(詳見《數據類型轉換》一章)。

var obj = new Object();1 + obj // "1[object Object]"

上面代碼將對象obj與數字1相加,這時 JavaScript 就會默認調用valueOf()方法,求出obj的值再與1相加。所以,如果自定義valueOf方法,就可以得到想要的結果。

var obj = new Object();
obj.valueOf = function () {return 2;
};1 + obj // 3

上面代碼自定義了obj對象的valueOf方法,于是1 + obj就得到了3。這種方法就相當于用自定義的obj.valueOf,覆蓋Object.prototype.valueOf。

5.2、Object.prototype.toString()

toString方法的作用是返回一個對象的字符串形式,默認情況下返回類型字符串。

var o1 = new Object();
o1.toString() // "[object Object]"var o2 = {a:1};
o2.toString() // "[object Object]"

上面代碼表示,對于一個對象調用toString方法,會返回字符串[object Object],該字符串說明對象的類型。

字符串[object Object]本身沒有太大的用處,但是通過自定義toString方法,可以讓對象在自動類型轉換時,得到想要的字符串形式。

var obj = new Object();
obj.toString = function () {return 'hello';
};
obj + ' ' + 'world' // "hello world"

上面代碼表示,當對象用于字符串加法時,會自動調用toString方法。由于自定義了toString方法,所以返回字符串hello world。

數組、字符串、函數、Date 對象都分別部署了自定義的toString方法,覆蓋了Object.prototype.toString方法。

[1, 2, 3].toString() // "1,2,3"'123'.toString() // "123"
(function () {return 123;
}).toString()// "function () {// return 123;// }"
(new Date()).toString()// "Tue May 10 2016 09:11:31 GMT+0800 (CST)"

上面代碼中,數組、字符串、函數、Date 對象調用toString方法,并不會返回[object Object],因為它們都自定義了toString方法,覆蓋原始方法。

5.3、toString() 的應用:判斷數據類型

Object.prototype.toString方法返回對象的類型字符串,因此可以用來判斷一個值的類型。

var obj = {};
obj.toString() // "[object Object]"

上面代碼調用空對象的toString方法,結果返回一個字符串object Object,其中第二個Object表示該值的構造函數。這是一個十分有用的判斷數據類型的方法。

由于實例對象可能會自定義toString方法,覆蓋掉Object.prototype.toString方法,所以為了得到類型字符串,最好直接使用Object.prototype.toString方法。通過函數的call方法,可以在任意值上調用這個方法,幫助我們判斷這個值的類型。

Object.prototype.toString.call(value)

上面代碼表示對value這個值調用Object.prototype.toString方法。

不同數據類型的Object.prototype.toString方法返回值如下。

  • 數值:返回[object Number]。

  • 字符串:返回[object String]。

  • 布爾值:返回[object Boolean]。

  • undefined:返回[object Undefined]。

  • null:返回[object Null]。

  • 數組:返回[object Array]。

  • arguments 對象:返回[object Arguments]。

  • 函數:返回[object Function]。

  • Error 對象:返回[object Error]。

  • Date 對象:返回[object Date]。

  • RegExp 對象:返回[object RegExp]。

  • 其他對象:返回[object Object]。

這就是說,Object.prototype.toString可以看出一個值到底是什么類型。

Object.prototype.toString.call(2) // "[object Number]"Object.prototype.toString.call('') // "[object String]"Object.prototype.toString.call(true) // "[object Boolean]"Object.prototype.toString.call(undefined) // "[object Undefined]"Object.prototype.toString.call(null) // "[object Null]"Object.prototype.toString.call(Math) // "[object Math]"Object.prototype.toString.call({}) // "[object Object]"Object.prototype.toString.call([]) // "[object Array]"

利用這個特性,可以寫出一個比typeof運算符更準確的類型判斷函數。

var type = function (o){var s = Object.prototype.toString.call(o);return s.match(/\[object (.*?)\]/)[1].toLowerCase();
};
type({}); // "object"
type([]); // "array"
type(5); // "number"
type(null); // "null"
type(); // "undefined"
type(/abcd/); // "regex"
type(new Date()); // "date"

在上面這個type函數的基礎上,還可以加上專門判斷某種類型數據的方法。

var type = function (o){var s = Object.prototype.toString.call(o);return s.match(/\[object (.*?)\]/)[1].toLowerCase();
};
['Null','Undefined','Object','Array','String','Number','Boolean','Function','RegExp'
].forEach(function (t) {
type['is' + t] = function (o) {return type(o) === t.toLowerCase();
};
});
type.isObject({}) // true
type.isNumber(NaN) // true
type.isRegExp(/abc/) // true

5.4、Object.prototype.toLocaleString()

Object.prototype.toLocaleString方法與toString的返回結果相同,也是返回一個值的字符串形式。

var obj = {};
obj.toString(obj) // "[object Object]"
obj.toLocaleString(obj) // "[object Object]"

這個方法的主要作用是留出一個接口,讓各種不同的對象實現自己版本的toLocaleString,用來返回針對某些地域的特定的值。

var person = {toString: function () {return 'Henry Norman Bethune';
},toLocaleString: function () {return '白求恩';
}
};
person.toString() // Henry Norman Bethune
person.toLocaleString() // 白求恩

上面代碼中,toString()方法返回對象的一般字符串形式,toLocaleString()方法返回本地的字符串形式。

目前,主要有三個對象自定義了toLocaleString方法。

  • Array.prototype.toLocaleString()

  • Number.prototype.toLocaleString()

  • Date.prototype.toLocaleString()

舉例來說,日期的實例對象的toString和toLocaleString返回值就不一樣,而且toLocaleString的返回值跟用戶設定的所在地域相關。

var date = new Date();
date.toString() // "Tue Jan 01 2018 12:01:33 GMT+0800 (CST)"
date.toLocaleString() // "1/01/2018, 12:01:33 PM"

5.5、Object.prototype.hasOwnProperty()

Object.prototype.hasOwnProperty方法接受一個字符串作為參數,返回一個布爾值,表示該實例對象自身是否具有該屬性。

var obj = {p: 123
};
obj.hasOwnProperty('p') // true
obj.hasOwnProperty('toString') // false

上面代碼中,對象obj自身具有p屬性,所以返回true。toString屬性是繼承的,所以返回false。

參考鏈接

  • Axel Rauschmayer,?Protecting objects in JavaScript

  • kangax,?Understanding delete

  • Jon Bretman,?Type Checking in JavaScript

  • Cody Lindley,?Thinking About ECMAScript 5 Parts

  • Bjorn Tipling,?Advanced objects in JavaScript

  • Javier Márquez,?JavaScript properties are enumerable, writable and configurable

  • Sella Rafaeli,?Native JavaScript Data-Binding: 使用存取函數實現model與view的雙向綁定

  • Lea Verou,?Copying object properties, the robust way

本章節完

推薦閱讀系列章節

【JavaScript 教程】入門篇-導論

【JavaScript 教程】入門篇-JavaScript 語言的歷史

【JavaScript 教程】入門篇-JavaScript 的基本語法

【JavaScript 教程】數據類型-概述

【JavaScript 教程】數據類型-null, undefined 和布爾值

【JavaScript 教程】數據類型-數值

【JavaScript 教程】數據類型-字符串

【JavaScript 教程】數據類型-對象

【JavaScript 教程】數據類型-函數

【JavaScript 教程】數據類型-數組

【JavaScript 教程】運算符—算術運算符

【JavaScript 教程】運算符—比較運算符

【JavaScript 教程】運算符—布爾運算符

【JavaScript 教程】運算符—二進制位運算符

【JavaScript 教程】運算符—其他運算符,運算順序

【JavaScript 教程】語法專題—數據類型的轉換

【JavaScript 教程】語法專題—錯誤處理機制

【JavaScript 教程】語法專題—編程風格

【JavaScript 教程】語法專題—console 對象與控制臺

推薦購買阮一峰老師相關圖書

總結

以上是生活随笔為你收集整理的linq结果转换object_【JavaScript 教程】标准库—Object 对象的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲永久免费 | 精品国产日本 | 日本伦理中文字幕 | 狠狠做深爱婷婷综合一区 | 91九色蝌蚪视频 | 国产欧美在线观看 | 色视频线观看在线播放 | 91精品国产91 | 人人妻人人澡人人爽人人精品 | 亚洲欧美综合在线观看 | 成人国产免费视频 | 九色91视频 | 久久国产精品久久久 | 亚洲少妇第一页 | 在线观看欧美成人 | 一级女性全黄久久生活片免费 | 亚洲一区二区黄色 | 国产乱人对白 | 精品在线视频播放 | 久久色在线观看 | 亚洲高清在线观看 | 波多野结衣在线观看一区二区 | 少妇又色又紧又爽又刺激视频 | 91久久伊人 | 老司机精品视频在线播放 | 国产精品自拍片 | 性一交一乱一伧国产女士spa | 欧美成人精品一区二区三区 | 自拍视频一区二区 | 国产情趣视频 | 天天搞天天搞 | 无码人妻一区二区三区精品视频 | 国产视频一区二区三区在线 | 国产视频69 | 欧美日韩v | 国产日本欧美一区二区 | 日韩一级在线观看视频 | 天天精品视频 | 91国偷自产中文字幕久久 | 劲爆欧美第一页 | 欧美日韩国产亚洲一区 | 麻豆成人网 | 伊人www| 日本五十路 | 久久久国产成人 | 国产精品视频一区二区在线观看 | 极品美女开粉嫩精品 | 乱人伦xxxx国语对白 | 黑人巨大精品 | 91精品国自产在线观看 | 成人午夜影片 | 五月av综合av国产av | 浪漫樱花在线观看高清动漫 | 亚洲欧美日韩电影 | 久久久精品人妻无码专区 | 国产精品91一区二区 | 成年人黄色片 | 日本亚洲欧美在线 | 在线观看麻豆av | 在线观看中文 | 激情欧美一区二区三区精品 | 能在线观看的av网站 | 在线看片日韩 | 已满十八岁免费观看全集动漫 | 天天想你在线观看完整版电影高清 | www精品| 爱情岛亚洲品质自拍极速福利网站 | 天天操天天干天天插 | 日本中文字幕一区二区 | 日本国产在线视频 | 久操青青 | 国产麻豆精品一区二区 | 免费在线观看的黄色网址 | 伊人天天| 视频1区 | 国产在线视频91 | 最新国产精品视频 | 一级特黄aa大片欧美 | 福利一区二区 | 性无码专区无码 | 岛国av免费 | 久久思 | 亚洲a人| 日本人妖xxxx | 国产强伦人妻毛片 | 国产精品成人99一区无码 | 美女网站在线免费观看 | 久久精品男人的天堂 | 深夜福利一区二区 | 国产伦精品一区二区三 | 日韩美女在线 | av2018| 国产乱国产乱老熟300部视频 | 干爹你真棒插曲mv在线观看 | 亚洲欧洲在线视频 | 亚洲三级色 | 久久久久久久久蜜桃 | 欧美一级片免费在线观看 | 亚洲综合性 |