js中 abc 和new String abc 有什麼區別啊?

時間 2021-06-03 05:34:05

1樓:刃舞

資料型別的區別,乙個是字串,乙個是物件

你能將 string 這種基本型別像物件一樣使用是因為 js 有基本包裝型別這個概念,運算時會為字串建立個 String 例項來運算,而字串本身不參與運算,但這個包裝的例項只在運算時存在,運算後就會被銷毀

之所以這麼做只是為了使用方便,語法糖,你不能因為 js 有這個語法糖,就說字串和 object 沒區別

2樓:fiora

預編譯器自動無縫轉換二者

就像 」djdjjf」.length 字串怎麼會有屬性呢

因為預編譯器給他轉成了string object

3樓:彩虹Rainbow

實際上你得問題和包裝物件有關,JS設計時為了讓原始型別能方便呼叫一些方法就設計了包裝物件這麼乙個玩意。

比如說你可以這麼幹:

'abc'.length; // 3

但你仔細想想這是有問題的,因為這是原始型別,並不是引用型別,.length 這個方法是哪來的?

原理就是原始型別呼叫方法時會自動建立乙個包裝物件,呼叫之後銷毀。而 String 的包裝物件就是 new String()。

所以剛才你幹好事的時候其實是這樣的:

'abc'.length; // 你以為的

new String('abc').length; // 實際上的

回到你得問題,'abc' 與 new String('abc') 的區別就是乙個是原始型別、乙個是引用型別,而它兩的關係就是 new String('abc') 是 『abc』的包裝物件,而包裝物件的作用就是方便原始型別呼叫一些方法。

4樓:

我覺得可以嘗試從記憶體分配的角度來理解,當然你也可以從語法的角度來理解。

值型別的abc:儲存在記憶體棧上

裝箱後的abc:儲存在記憶體堆上面

5樓:Storm

眾所周知, 使用new操作符例項出來的都是物件.

new String('abc') // 也是乙個物件'abc' // 是乙個字串

只不過, new String('abc')這個物件裡面裝著'abc'而已

js中 aaa style 和 aaa getAttribute style 等價嗎,有無區別?

淡夏的綠茶 IE6 7下 elem.getAttribute style 和 elem.style 返回的都是 CSSStyleDeclaration 物件。這是個BUG,在IE8之後已經被修復了。elem.getAttribute style 返回的是元素的style屬性上css文字 如果有點話,...

js中 proto 和prototype的區別和關係?

這個問題屬於js原型知識點,我是這樣理解js的原型的 先區分主體,再辨別指向。主體可以分為 建構函式 原型建構函式new出來的例項 指向 1.建構函式和原型是相互指向的關係,建構函式.prototypes指向原型,原型.construtor指向建構函式 2.例項.proto 指向原型 3.例項.pr...

JS 中 object array map set 等底層資料結構是什麼?

加爾靈斯 這個問題很複雜啊 所有js物件都是基於乙個名為HeapObject的類生成的。生成物件的時候,引擎通過這個類向Heap申請空間。這個分配過程基本都是引擎自己實現,而不會呼叫malloc,因為要實現精確GC 物件的儲存結構就是分為幾塊,乙個頭部資訊,乙個屬性塊,存的是k v值形式的集合,乙個...