關於字串也可以是物件,引發的對typeof的思考。
阿新 • • 發佈:2018-12-17
文章目錄
問題背景
今天在看JS教程時,發現以下這個例子:
var x="john";
var y= new String("jhon");
typeof x;//返回String
typeof y;//返回Object
我想的是對於typeof返回值的追問。
後來在百度發現了這個問題的語言描述:JS繼承之原型鏈繼承。
簡單說就是:
- typeof
- prototype
- __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)
等價於