JS中String()與new String()的差異淺析
今天看到這樣的面試題,如下:
var yiifaa = 'yiifaa',
str1 = new String(yiifaa),
str2 = String(yiifaa)
宣告與賦值了3個變數,然後考題如下:
// 請確認以下的判斷是否準確
str1 === yiifaa
//
str2 === yiifaa
//
typeof str1 === typeof str2
根據JS的語法,要滿足===的條件如下:
1. 如果是引用型別,則兩個變數必須指向同一個物件(同一個地址);
2. 如果是基本型別,則兩個變數除了型別必須相同外,值還必須相等。
再把話題切換到String物件上來,String的宣告方式有三種(請參見第一段程式碼),但產生的型別卻不盡相同,結果如下:
// 型別為string,為基本型別
typeof yiifaa
// 型別為object,為引用型別
typeof str1
// 型別為string,為基本型別
typeof str2
那現在答案很清楚了,如下:
// false, 因為str1為引用型別
str1 === yiifaa
// true, 因為都是基本型別,並且值相等
str2 === yiifaa
// false, 雖然都是字串,但分別為object與string
typeof str1 === typeof str2
總結
很神奇的String物件,一方面可以作為基本型別,另一方面還可以作為引用型別,更神奇的是,為String.prototype新增方法,基本型別還可以引用到,怎麼做到的?
對比JAVA的Integer物件的實現,利用int宣告的變數可不能呼叫Integer的方法,所以還不是裝箱操作。
最後關於一個函式既可以作為普通函式呼叫,也可以作為建構函式呼叫,實現方法如下:
function User(username) {
this.username = username
// 這肯定是作為函式呼叫,但在服務端判斷需要改進
// 必須要進行判斷,否則死迴圈
if(this === window) {
return new User(username)
}
}
改進的方法如下:
function User (username) {
// 一定是呼叫了建構函式
if(this.inst === "User") {
this.username = username
} else {
return new User(username)
}
}
// 為User的上下文新增標記
User.prototype.inst = "User"
相關推薦
JS中String()與new String()的差異淺析
今天看到這樣的面試題,如下: var yiifaa = 'yiifaa', str1 = new String(yiifaa), str2 = String(yiifaa) 宣告與賦值了3個變數,然後考題如下: // 請確認以下的
js中parseInt()與parseFloat(),Number(),Boolean(),String()轉換
js將字串轉數值的方法主要有三種 轉換函式、強制型別轉換、利用js變數弱型別轉換。 1. 轉換函式: js提供了parseInt()和parseFloat()兩個轉換函式。前者把值轉換成整數,後者把值轉換成浮點數。只有對String型別呼叫這些方法,這兩個函式才能
JS中Date與String的相互轉換
1- Date -> Stringnew Date().toLocaleDateString(); ==> 2017/4/152- Date -> "2017-04-15"varye
Java中String直接賦字符串和new String的區別 如String str=new String("a")和String str = "a"有什麽區別?
this his The tin ase name ++ 常量池 TE 百度的面試官問 String A="ABC"; String B=new String("ABC"); 這兩個值,A,B 是否相等,如果都往HashSet裏面放,能放下嗎? 答:A==B 不等,
java中字串基本知識 String s=new String("abc")建立了幾個物件?
本文轉載自http://www.cnblogs.com/ydpvictor/archive/2012/09/09/2677260.html String s=new String("abc")建立了幾個物件? String str=new String("abc"); &nb
String str = new String("content") 建構函式有沒有返回值?new關鍵字到底在物件初始化中做了什麼?
看到String str = new String("content")時想到一個問題:在我印象裡,建構函式時沒有返回值的,那麼建立的物件是如何賦值的呢?有沒有方法確定知道建構函式有沒有返回呢? 建構函式時沒有返回值的,賦值因為new關鍵字。 new的內部是呼叫了一個叫void * oper
C++中std::string與C-String字元陣列的互相轉換
C語言中只有字元陣列這一說法,沒有C++專門封裝的字串類std::string。而字元陣列C-String以\0作為結束符。std::string其實還是儲存了C-String這個指標,只不過不同的編譯期對std::string中的儲存結構都做了不同的處理,這裡我們不討論std::str
關於String str1="123"與String str2=new String("123")類問題詳解
要徹底弄明白這個問題,我們需要清楚一些基本概念:Class檔案中的常量池,執行時常量池(runtime constant pool),全域性字串常量池(StringTable),Java heap,一些常用位元組碼以及常量池中的常量型別等jvm的知識: Class檔案常量
論 java中String 和 new String還有物件中的String字串在記憶體中的儲存
一直以來,所有人都說,java中的String型別是不可變的,可是為什麼不可變確很少有人說的透徹,String和new String的區別,物件中的String和直接定義一個String是否有區別,一直都是一知半解。看了很多文件都是各種猜測,沒有具體程式碼來
String str = new String("content") 建構函式有沒有返回值?new關鍵字到底在物件初始化中做了什麼?
看到String str = new String("content")時想到一個問題:在我印象裡,建構函式時沒有返回值的,那麼建立的物件是如何賦值的呢?有沒有方法確定知道建構函式有沒有返回呢? 建構函式時沒有返回值的,賦值因為new關鍵字。 new的內部是呼叫了一個叫v
String s =new String()分析堆與棧 建立了幾個物件
轉載自 分享最終編輯 tanzhimei393先定義S String str1 = “abc”; System.out.println(str1 == “abc”); 步驟: 1) 棧中開闢一塊空間存放引用str1, 2) String池中開
java和js中JSONObject,JSONArray,Map,String之間轉換——持續更新中
--------------------------------------------------java中-------------------------------------------------------------- 1.String轉JSONObject
JS中Array物件和String物件的常用方法
1.陣列的建立: 使用字面量建立: var arr = [10,20,20,40]; 使用建構函式建立陣列 var arr = new Array(1,2,3,4); 2.陣列元素的型別:
String str="abc" 與 String str = new String("abc");詳解
1.java執行環境有一個字串池,由String類維護,執行語句String str="abc"時:
js中json物件和string互轉
json轉string的方法 /** * json物件轉字串形式 */ function json2str(o) { var arr = []; var fmt = function(s) { if (typeof s ==
angular js 中conpile與link應用與區別
點擊 ive 增刪 html ret ont 綁定 function cli link方法是compile拋出來的一個方法 應用 app.directive("thumbNail",function(){ return{ restrict:"AC
js中的|| 與 &&
字符 als 邏輯與 執行 lean 邏輯或 false bool 轉換 js中的|| 與 &&a && b : 將a, b轉換為Boolean類型, 再執行邏輯與, true返回b, false返回aa || b : 將a, b轉換為Boo
JS中typeof與instanceof的區別
color tro 算數 同時 typeof window string 鏈接 new JavaScript 中 typeof 和 instanceof 常用來判斷一個變量是否為空,或者是什麽類型的。但它們之間還是有區別的: typeof typeof 是一個一元運算,放在
JS中同步與異步
事件 過程 ole 跳過 說明 timeout nbsp 技術分享 com 不講過多定義,舉兩個例子說明下 例一: console.log(100); setTimeout(function(){ console.log(200); },1000); cons
js中的||與&&用法
defined clas efi blog 執行 urn cti 用法 表達式 &&和||在JQuery源代碼內尤為使用廣泛,由網上找了些例子作為參考,對其用法研究了一下: &&: function a(){ alert("