国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

數據類型轉換,普通類型(原始對象)和對象的區別的一些知識點

y1chuan / 2838人閱讀

摘要:類型的和是,空字符串也是,所有的對象都是即使是空對象也是。六普通類型原始對象和包裝對象的轉換某些場合,原始類型的值會自動當作包裝對象調用,即調用包裝對象的屬性和方法。第三重新給變量賦值且值是對象類型,此時會在堆內存保存的值。

一、數據類型轉換:
JS是一門動態類型的語言,變量數據類型沒有限制,可以隨時賦值,但是運算時是對數據類型有要求的,如果運算類型不符,js會自動強制轉換類型后再進行計算。
"2"-1

"2"是string類型1是number類型,兩個數據類型不同,但是進行了減法運算,運算前js會自動嘗試將string類型轉為number類型后再進行運算。

二、任意值轉字符串:
js提供了以下API進行轉換,String(?),?.toString()

var a0 = 0;
var a1 =true;
var a2 = undefined;
var a3 = null;
var a4 = {};

String(a0)
"0"
String(a1)
"true"
String(a2)
"undefined"
String(a3)
"null"
String(a4)
"[object Object]"

a0.toString()
"0"
a1.toString()
"true"
a2.toString()
VM308:1 Uncaught TypeError: Cannot read property "toString" of undefined
    at :1:4
(anonymous) @ VM308:1
a3.toString()
VM315:1 Uncaught TypeError: Cannot read property "toString" of null
    at :1:4
(anonymous) @ VM315:1
a4.toString()
"[object Object]"

通過上述代碼可以發現,null,和undefined可以用String但是不能用toString,因為他們沒有toString()方法。

var a0 = 0 + "";
var a1 = true + "";
var a2 = undefined + "";
var a3 = null + "";
var a4 = {} + "";
undefined
a0
"0"
a1
"true"
a2
"undefined"
a3
"null"
a4
"[object Object]"

也可以通過加一個空字符串來轉成字符串類型,該方法核心在于加號,加號如果發現左右兩邊任意有字符串,就會嘗試將另外一邊也轉成字符串。

三、任意值轉布爾值:
js提供了以下Boolean()方法進行轉換,還可以通過!!取反兩次進行轉換

var a0 = 0;
var a1 = true;
var a2 = undefined;
var a3 = null;
var a4 = {};
undefined
Boolean(a0)
false
Boolean(a1)
true
Boolean(a2)
false
Boolean(a3)
false
Boolean(a4)
true
!!a0
false
!!a1
true
!!a2
false
!!a3
false
!!a4
true

所有的數據類型中,有5種特殊值是false。number類型的0和NaN是false,空字符串‘’也是false,所有的對象都是true即使是空對象也是。
5個falsy值

var a = 0
var a1 = NaN
Boolean(a)
false
Boolean(a1)
false

var a2 = ""
Boolean(a2)
false

var a3 = null
Boolean(a3)
false

var a4 = undefined
Boolean(a4)
false


四、任意值轉數值:
js提供了以下API進行轉換,
1、Number():
Number()方法會對字符串進行轉換,如可以轉換成number類型則轉為對應的數值,如果不能則返回NaN。

// 空字符串轉為0
Number("") // 0

// 布爾值:true 轉成 1,false 轉成 0
Number(true) // 1
Number(false) // 0

// undefined:轉成 NaN
Number(undefined) // NaN

// null:轉成0
Number(null) // 0

// 字符串:如果不可以被解析為數值,返回 NaN
Number("324abc") // NaN

2、parseInt(string, radix),parseFloat(),parseFloat一般用來轉浮點數
string要被解析的值。如果參數不是一個字符串,則將其轉換為字符串(使用 ToString 抽象操作)。字符串開頭的空白符將會被忽略。radix一個介于2和36之間的整數(數學系統的基礎),表示上述字符串的基數。比如參數"10"表示使用我們通常使用的十進制數值系統。始終指定此參數可以消除閱讀該代碼時的困惑并且保證轉換結果可預測。當未指定基數時,不同的實現會產生不同的結果,通常將值默認為10。

Number()函數將字符串轉為數值,要比parseInt()和parseFloat()函數嚴格很多。Number()只要有一個字符無法轉成數值,整個字符串就會被轉為NaN,而parseInt()和parseFloat()會嘗試將字符串前面的數字轉成數字。如果要轉的字符串第一位就無法轉換則返回NaN

var a = "123abc"
Number(a)//字符串a,Number直接返回NaN
NaN

parseInt(a,10)//字符串a,parseInt則將字符串前面的123轉成數字
123

parseFloat(a)
123

var a = "abc123"
parseInt(a,10)
NaN
parseFloat(a)
NaN


除了使用parseInt(string, radix),parseFloat(),一般多使用【-0】和【+0】方法進行轉換
"1"-0
1

"1.21"-0
1.21

"-1"-0
-1

"-1.21"-0
-1.21

五、普通類型和包裝對象:
1、所謂“包裝對象”,指的是與數值、字符串、布爾值分別相對應的Number、String、Boolean三個原始對象。這三個原始對象可以把原始類型的值變成(包裝成)對象。

var a = new Number(123);
var b = new String("abc");
var c = new Boolean(true);

var a1 = 123;
var b1 = "abc";
var c1 = true;

當帶有new操作符時,是當作對象并且JS提供了一些方法,不帶new聲明是,值直接是存在棧內存,帶new操作符時當對象是存在堆內存。通過下面代碼可以看到,通過new聲明提供了很多方法。

var a = "a"
var b = new String("b")

console.log(a)
a


console.log(b)
String {"b"}....

六、普通類型(原始對象)和包裝對象的轉換:
某些場合,原始類型的值會自動當作包裝對象調用,即調用包裝對象的屬性和方法。這時,JavaScript 引擎會自動將原始類型的值轉為包裝對象實例,并在使用后立刻銷毀實

var a = "abc"
//聲明一個普通字符串類型(原始對象),其本身并沒有length屬性
a.length    
//調用a.length時JS引擎會自動將var a = "abc"轉成var a = new String(a)
3
a.name = "zhang"
"zhang"
//a轉為包裝對象后加了一個name屬性
a.name 
//但是a.name卻返回undefined,這是因為原始類型的值轉為包裝對象使用后立刻銷毀
undefined

七、關于內存的一些知識點:
在js普通(簡單)數據類型,存到棧內存,復雜類型存到堆內存,string兩者都可以存。


棧內存和堆內存數據組織形式不同。

示例解析:
第一:a是一個對象,棧內存地址假設是addr1,值保存在堆內存。
第二:聲明變量b等于變量a,則變量b也是一個對象,因為b=a,所以棧內存b的地址也
是addr1,并且堆內存不會重復保存b的值。
第三:重新給變量b賦值且值是對象類型,此時會在堆內存保存b的值。
結果:a.name返回的是a,因為b第二次賦值時在堆內存已經保存了它的值,a和b在堆內存有各自的值互不影響。

示例解析:
第一:a是一個對象,棧內存地址假設是addr1,值保存在堆內存。
第二:聲明變量b等于變量a,則變量b也是一個對象,因為b=a,所以棧內存b的地址也是addr1,堆內存不重復保存b的值。
第三:變量a和b兩個棧內存地址是相同的,都指向堆內存的地址addr1,此時修改a.name或者b.name都會將堆內存數據覆蓋。
結果:a.name返回的是b,因為b.name已經修改了堆內存內保存的數據

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/104578.html

相關文章

  • 【面試篇】寒冬求職季之你必須要懂原生JS(上)

    摘要:只能遍歷數組,不能中斷,返回值是修改后的數組。這在語法上,稱為暫時性死區。作用域鏈無論是還是查詢,都會在當前的作用域開始查找,如果沒有找到,就會向上級作用域繼續查找目標標識符,每次上升一個作用域,一直到全局作用域為止。 互聯網寒冬之際,各大公司都縮減了HC,甚至是采取了裁員措施,在這樣的大環境之下,想要獲得一份更好的工作,必然需要付出更多的努力。 一年前,也許你搞清楚閉包,this,原...

    寵來也 評論0 收藏0
  • 前端總結

    摘要:是一個雙目運算符內部實現機制是通過原型鏈來判斷能自定義行為的東西三類型轉換轉除了其他所有值都轉為包括所有對象對象轉原始類型對象在轉換類型的時候,會調用內置的函數該方法在轉原始類型時調用優先級最高。 JS基礎知識 (一)JS中原始類型(1)原始值有六種:boolean,null,undefined,number,string,symbol(2)原始類型存儲的都是值,沒有函數可以調用,能夠...

    Jenny_Tong 評論0 收藏0
  • 前端總結

    摘要:是一個雙目運算符內部實現機制是通過原型鏈來判斷能自定義行為的東西三類型轉換轉除了其他所有值都轉為包括所有對象對象轉原始類型對象在轉換類型的時候,會調用內置的函數該方法在轉原始類型時調用優先級最高。 JS基礎知識 (一)JS中原始類型(1)原始值有六種:boolean,null,undefined,number,string,symbol(2)原始類型存儲的都是值,沒有函數可以調用,能夠...

    bladefury 評論0 收藏0
  • 前端總結

    摘要:是一個雙目運算符內部實現機制是通過原型鏈來判斷能自定義行為的東西三類型轉換轉除了其他所有值都轉為包括所有對象對象轉原始類型對象在轉換類型的時候,會調用內置的函數該方法在轉原始類型時調用優先級最高。 JS基礎知識 (一)JS中原始類型(1)原始值有六種:boolean,null,undefined,number,string,symbol(2)原始類型存儲的都是值,沒有函數可以調用,能夠...

    Zoom 評論0 收藏0
  • js面試題(上)

    https://segmentfault.com/a/11... 原型 / 構造函數 / 實例 對原型的理解 我們知道在es6之前,js沒有類和繼承的概念,js是通過原型來實現繼承的。在js中一個構造函數默認自帶有一個prototype屬性, 這個的屬性值是一個對象,同時這個prototype對象自帶有一個constructor屬性,這個屬性指向這個構造函數,同時每一個實例 都有一個__proto...

    leap_frog 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<