JS整理知識點5 10

2021-09-13 18:18:54 字數 4318 閱讀 6970

tostring() 的應用:判斷資料型別

為了得到型別字串,最好直接使用object.prototype.tostring方法。通過函式的call方法,可以在任意值上呼叫這個方法,幫助我們判斷這個值的型別。

**object.prototype.tostring.call(value)**
不同資料型別的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]。

可以寫出乙個比typeof運算子更準確的型別判斷函式。

var type = function (o);

type({}); // "object"

type(); // "array"

type(5); // "number"

type(null); // "null"

type(); // "undefined"

type(/abcd/); // "regex"

type(new date()); // "date"

new 命令的原理

使用new命令時,它後面的函式依次執行下面的步驟。

建立乙個空物件,作為將要返回的物件例項。

將這個空物件的原型,指向建構函式的prototype屬性。

將這個空物件賦值給函式內部的this關鍵字。

開始執行建構函式內部的**。

建構函式內部,this指的是乙個新生成的空物件,所有針對this的操作,都會發生在這個空物件上。建構函式之所以叫「建構函式」,就是說這個函式的目的,就是操作乙個空物件(即this物件),將其「構造」為需要的樣子。

如果建構函式內部有return語句,而且return後面跟著乙個物件,new命令會返回return語句指定的物件;否則,就會不管return語句,返回this物件。

var vehicle = function () ;

(new vehicle()) === 1000

// false

上面**中,建構函式vehicle的return語句返回乙個數值。這時,new命令就會忽略這個return語句,返回「構造」後的this物件。

如果return語句返回的是乙個跟this無關的新物件,new命令會返回這個新物件,而不是this物件

var vehicle = function ();

};(new vehicle()).price

// 2000

如果對普通函式(內部沒有this關鍵字的函式)使用new命令,則會返回乙個空物件。

function getmessage() 

var msg = new getmessage();

msg // {}

typeof msg // "object"

函式內部可以使用new.target屬性。如果當前函式是new命令呼叫,new.target指向當前函式,否則為undefined。

function f() 

f() // false

new f() // true

可以判斷函式呼叫的時候,是否使用new命令。

function f() 

// ...

}f() // uncaught error: 請使用 new 命令呼叫!

有時拿不到建構函式,只能拿到乙個現有的物件。我們希望以這個現有的物件作為模板,生成新的例項物件

var person1 = 

};var person2 = object.create(person1);

person2.name // 張三

person2.greeting() // hi! i'm 張三.

object.getprototypeof()

方法返回引數物件的原型。這是獲取原型物件的標準方法。

var f = function () {};

var f = new f();

object.getprototypeof(f) === f.prototype // true

// 空物件的原型是 object.prototype

object.getprototypeof({}) === object.prototype // true

// object.prototype 的原型是 null

object.getprototypeof(object.prototype) === null // true

// 函式的原型是 function.prototype

function f() {}

object.getprototypeof(f) === function.prototype // true

object.create方法,用來滿足這種需求。該方法接受乙個物件作為引數,然後以它為原型,返回乙個例項物件。該例項完全繼承原型物件的屬性。

// 原型物件

var a =

};// 例項物件

var b = object.create(a);

object.getprototypeof(b) === a // true

b.print() // hello

b.print === a.print // true

//以a物件為原型,生成了b物件。b繼承了a的所有屬性和方法。

三種方式生成的新物件是等價的。

var obj1 = object.create({});

var obj2 = object.create(object.prototype);

var obj3 = new object();

如果想要生成乙個不繼承任何屬性(比如沒有tostring和valueof方法)的物件,可以將object.create的引數設為null

物件obj的原型是null,它就不具備一些定義在object.prototype物件上面的屬性,比如valueof方法。

var obj = object.create(null);

obj.valueof()

// typeerror: object [object object] has no method 'valueof'

第二個引數:是乙個屬性描述物件,它所描述的物件屬性,會新增到例項物件,作為該物件自身的屬性。

例項物件的isprototypeof方法,用來判斷該物件是否為引數物件的原型。

object.prototype.isprototypeof({}) // true

object.prototype.isprototypeof() // true

object.prototype.isprototypeof(/xyz/) // true

object.prototype.isprototypeof(object.create(null)) // false

由於object.prototype處於原型鏈的最頂端,所以對各種例項都返回true,只有直接繼承自null的物件除外。

物件例項的hasownproperty方法返回乙個布林值,用於判斷某個屬性定義在物件自身,還是定義在原型鏈上。

date.hasownproperty('length') // true

date.hasownproperty('tostring') // false

確保拷貝後的物件,與原物件具有同樣的原型。

確保拷貝後的物件,與原物件具有同樣的例項屬性。

function copyobject(orig) 

//利用 es2017 才引入標準的object.getownpropertydescriptors方法

整理知識點

python中的變數不需要宣告。每個變數在使用前都必須賦值,變數賦值以後該變數才會被建立。在python 中,變數就是變數,它沒有型別,我們所說的 型別 是變數所指的記憶體中物件的型別。乙個變數可以通過賦值指向不同型別的物件。python3 有六個標準的資料型別 不可變資料 number 數字 st...

專案零碎知識點 5 10

io ioutil go mod go mod 使用 gin.context json.marshal 例 type stu struct type class struct fun main 指標變數 cla new class cla.name 1班 cla.grade 3 stu.class ...

js知識點 掘金 JS小知識點補充

toc 邏輯或與邏輯與 1.在條件判斷中使用 條件中的 兩個條件都成立,整體判斷條件才會成立 條件中的 只要有乙個條件成立,整體判斷條件就成立。2.在賦值操作中使用 var a 1 2 首先驗證1是真假,如果為真,把1賦值給a,如果為假,把2賦值給a a b 先驗證a的真假,為真結果是a,為假結果是...