1. 程式人生 > >關於字串也可以是物件,引發的對typeof的思考。

關於字串也可以是物件,引發的對typeof的思考。

文章目錄

問題背景

今天在看JS教程時,發現以下這個例子:

var x="john";
var y= new String("jhon");
typeof x;//返回String
typeof y;//返回Object

我想的是對於typeof返回值的追問。
後來在百度發現了這個問題的語言描述:JS繼承之原型鏈繼承。
簡單說就是:

  1. typeof
  2. prototype
  3. __proto__

這三個關鍵字的區別。

寫在前面

首先是看了@“陌上寒的簡書”關於JS原型和原型鏈的講解,感覺自己懂了一些。這裡進行復述。另外:感謝前輩的指點!陌上寒的簡書

問題解答

物件建立

首先我們要從JS建立物件的三個方法說起。
JS建立物件有三種方法分別是:
1、物件直接量

var a1 ="A";
var a2 ={x:12,y:13};

2、New方法

var b1 = new Object();
var b2 = new Array();
function() fun{
	console.log("這是一個自定義的建構函式")
};
var c1 = new fun(); 

3、Object.creat方法

const d1 = Object.creat({x:1});
const d2 = Object.creat(Object.prototype{
			foo:{
		writable: true,
        configurable: true,
        value: "hello"
}
})
const d3 = Object.create(null)
var e1 = {};
var e2 = new Object();
var e3 = Object.create(Object.prototype)

要知道JS中萬物皆物件,我們把創建出來的物件分為函式物件和普通物件。可以通過typeof來判斷。一般普通物件返回Object而函式物件返回對應的function。
那麼普通物件和函式物件的區別是什麼?

typeof

物件分類

2018/11/09更新
今天在地鐵上又重新溫故了一遍老哥的部落格。
緊接著昨天的問題我們給出函式物件和普通物件的一些區別:
函式物件可以建立簡單物件:

function fun (){
	console.log("這是一個自定義建構函式")
};
var object = new fun();

可以通過typeof來判斷

function f1(){};
typeof f1//return "function"
var o1 = new f1();
typeof o1//return "object"
var o2 = {};
typeof o2//return" object"

複習函式物件的建立方法

在這裡複習一下建立函式物件的方法:

function f1(){};
等價於
var f1 = new function();
function f2(a,b){
	window.alert(a+b);
}
f(1,2);
var f2 = new function(’a','b',alert)
等價於