欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JavaScript基本數(shù)據(jù)類型及值類型和引用類型

 更新時間:2015年08月25日 18:01:07   投稿:mrr  
大家經(jīng)??梢砸姷絡(luò)avascript中的一些數(shù)據(jù)類型,比如“undefined”、“boolean”、“string”等等,這篇文章就和大家一起來學(xué)習(xí)JavaScript基本數(shù)據(jù)類型及值類型和引用類型,有需要的童鞋參考下,本文寫的不好地方,還望大家提出,共同學(xué)習(xí)進(jìn)步

在JavaScript中四種基本的數(shù)據(jù)類型:數(shù)值(整數(shù)和實數(shù))、字符串型(用“”號或‘'括起來的字符或數(shù)值)、布爾型(使True或False表示)和空值。在JavaScript的基本類型中的數(shù)據(jù)可以是常量,也可以變量。由于JavaScript采用弱類型的形式,因而一個數(shù)據(jù)的變量或常量不必首先作聲明,而是在使用或賦值時確定其數(shù)據(jù)的類型的。當(dāng)然也可以先聲明該數(shù)據(jù)的類型,它是通過在賦值時自動說明其數(shù)據(jù)類型的。

javascript中的變量

      javascript中的變量只是一個占位符,前言已經(jīng)說過了,因為松散類型的緣故。 

定義變量:

var name;

上述代碼定義了一個名為name的變量,該變量可以用來保存任何值(像這樣未經(jīng)過初始化的變量,會保存一個特殊的值--undefined),也可以初始化變量的值,

var name =”jwy”; //javascript 中的單引號和雙引號沒有區(qū)別,不過要注意正確嵌套
name=10;

一開始name初始化成了字符串值“jwy”,后又改成了數(shù)字值—100,這種做法是不建議的,但是在ECMAScript是有效果的,而且在很多時候會這樣做。

也可以一條語句定義多個變量,而且很多javascript框架是這么做的

var name=”jwy”,author,age=29;

每條語句加分號是很好的編程習(xí)慣。不過一條多個變量時,建議換行和縮進(jìn),這樣可以提高可讀性。

簡單數(shù)據(jù)類型

      ECMAScript中有5種簡單數(shù)據(jù)類型:Undefined,Null,Boolea,Number和String。還有一種復(fù)雜數(shù)據(jù)類型—Object

typeof操作符

      由于Javascript中的變量是松散類型的,所以它提供了一種檢測當(dāng)前變量的數(shù)據(jù)類型的方法,也就是typeof關(guān)鍵字,在上面提到的ECMAScript中的5種簡單數(shù)據(jù)類型中,(記住,這5種只是數(shù)據(jù)類型,代表一種數(shù)據(jù)類型,就想C#中的int,string類型一樣),通過typeof關(guān)鍵字,對這5種數(shù)據(jù)類型會返回下面的值(以字符串形式顯示

“undefined”    ----------   如果值未定義                       Undefined

“boolean”      ----------     如果這個值是布爾值              Boolean

“string”        ----------     如果這個值是字符串              String

“number”      ----------     如果這個值是數(shù)值類型           Number

“object”        ----------     如果這個值是對象或null        Object

“function”       ----------     如果這個值是函數(shù)                 Function

不過嚴(yán)格來說,函數(shù)在ECMAScript中是對象,每個函數(shù)都是Function這個類的一個實例,既然函數(shù)是一個對象,那么它也就是一個引用類型了,所以一個函數(shù)只是一個變量名而已,因此,在很多場合常常可以看到,將函數(shù)名作為參數(shù),傳進(jìn)函數(shù)中,然后進(jìn)行調(diào)用,這就類似于C#中的委托,在后面會詳細(xì)的講解函數(shù)這個東西,畢竟Javascript中很多東西都依賴于函數(shù)來實現(xiàn)。

Undefined 類型

      上面說了,5種類型是數(shù)據(jù)類型,所以數(shù)據(jù)類型是有值的,Undefined的值就是undefined,注意,是u是小寫的。如果聲明變量卻沒有初始化,則當(dāng)前變量的值就是undefined。不過,一般建議盡量給變量初始化,但是在早期的Javascript版本中是沒有規(guī)定undefined這個值的,所以在有些框架中為了兼容舊版瀏覽器,會給window對象添加undefined值,如下:

window['undefined'] = window['undefined']; 
//或者
window.undefined = window.undefined; 

簡單的說就是給window對象的undefined屬性賦上undefined,在較老的瀏覽器對象并沒有undefined這個屬性,所以如果使用到undefined的操作將會導(dǎo)致失常,故采用這樣的方式,不過一開始看會有點難理解,在舊版本的瀏覽器中會因為沒有window.undefined這個對象而返回一個undefined值,所以這樣做可以兼容舊瀏覽器。

不過包含undefined值的變量與未定義的變量是不一樣的,如:

var name;
alert(name);//undefined
alert(age);// 錯誤:age is not defined

還沒聲明過的變量只能執(zhí)行一項操作,其他全都不能做,就是使用typeof操作符檢測其數(shù)據(jù)類型。

如果不管聲明過未初始化以及未聲明過的變量執(zhí)行typeof都是返回undefined的值。兩種變來那個都不能執(zhí)行真正的操作

Null類型

      Null類型的值是null,它表示一個空對象指針,沒有指向任何對象,如果一個變量的值是null,那當(dāng)前變量很有可能就是垃圾收集的對象,使用typeof監(jiān)測null值時會返回”object”,

var person = null;
alert(typeof person);//”object”

建議:如果變量是要用來保存對象的額,則初始化為null,這樣到時就可以檢測該變量是否已經(jīng)保存了一個對象的引用的,

注意:undefined值是派生自null的,所以對他們執(zhí)行相等測試會返回true,如:

alert(null == undefind);//true

盡管如此,但是他們用途完全不同,無論在什么情況下都沒必要將一個變量的值顯示設(shè)為undefined,但是這個規(guī)則對null卻不適用。

Boolean類型

      這個類型只有兩個值:true 和false。雖然只有兩個值,但是javascript中所有類型的值都有與這兩個值等價的值。要將一個值轉(zhuǎn)換為對應(yīng)的Boolean值,可以調(diào)用轉(zhuǎn)型函數(shù)Boolean()  (其實Boolean ,Object,String,Number,Function等這些都是一個函數(shù),構(gòu)造函數(shù),同樣也可以理解為一個類,用類型調(diào)用toString()方法會返回這樣的東西:

"function Function() { [native code] }"  ,F(xiàn)unction會相應(yīng)的改成各自的那個調(diào)用函數(shù)   )

其實在 if 語句判斷中,會對里面的條件自動執(zhí)行Boolean變化的。

Number類型

      數(shù)值類型有很多值,最基本的當(dāng)然就是十進(jìn)制啦,如:     

var num=510;

除了十進(jìn)制,整數(shù)還可以通過八進(jìn)制或十六進(jìn)制,其中八進(jìn)制字面值第一位必須是0,然后是八進(jìn)制數(shù)字序列,如果字面值中的數(shù)值超出了范圍,那么前導(dǎo)零將被忽略。后面的額數(shù)值將被當(dāng)做十進(jìn)制數(shù)解析。

var num1=070;//八進(jìn)制的56
var num2 =079;//無效的八進(jìn)制—解析為79
var num3 =08;// 無效的八進(jìn)制—解析為8

而十六進(jìn)制前面則必須是0x,后跟十六進(jìn)制數(shù)字(0~F),不分大小寫。如:

var num1 = 0xA;
var num2 = 0x1f;

雖然可以表示為八進(jìn)制和十六進(jìn)制,但是計算時會被轉(zhuǎn)換成十進(jìn)制值。

除了整數(shù),還有浮點數(shù)值,當(dāng)然了,沒有像其他強(qiáng)類型語言中的float之類的關(guān)鍵字了。

var num1 = 1.1;
var num2 =0.1;
var num3 = .1;//有效,但不推薦

在保存整數(shù)時內(nèi)存分配大小只有浮點數(shù)的1/2,所以當(dāng)浮點數(shù)可以轉(zhuǎn)換為整數(shù)時,javascript會自動轉(zhuǎn)換為整數(shù)。

當(dāng)然了,除了這些數(shù)值比較小的,還有一些極大或極小的數(shù)值,可以用科學(xué)計數(shù)法表示,

var num=123.456e10;

浮點數(shù)值的最高精度是17位小數(shù),但是計算時其精確度遠(yuǎn)遠(yuǎn)不如整數(shù)。例如 ,0.1+0.2不等于0.3,而是0.3000000000000004,所以在做判斷時,千萬不要用浮點數(shù)相加判斷等于預(yù)想中的某個值。

在javascript中數(shù)值最小的是Number.MIN_VALUE,這里可以想象成Number是一個類,而MIN_VALUE 是一個靜態(tài)變量,儲存最小值,同樣,最大的是Number.MAX_VALUE。

如果計算中超出了這個最大值和最小值范圍,則將被自動轉(zhuǎn)換成Infinity值,如果是負(fù)數(shù),就是-Infinity,整數(shù)就是Infinity,Infinity的意思是無窮,也就是正負(fù)無窮,跟數(shù)學(xué)中的概念是一樣的。但是Infinity是無法參與計算的??梢杂迷瘮?shù)確定是不是有窮:isFinite();只有位于數(shù)值范圍內(nèi)才會返回true。

在Javascript中數(shù)值除了那些普通的整數(shù)、浮點數(shù)、最大值、最小值、無窮之外呢,還有一個特殊的值,就是NaN。這個數(shù)值用于表示一個本來要返回數(shù)值的操作數(shù)未返回數(shù)值的情況。比如,在C#中任何數(shù)值除以0都會報錯,拋出異常,但是在Javascript中,任何數(shù)值除以0會返回Nan,因此不會影響代碼的執(zhí)行。

NaN的特點:

1、任何設(shè)計NaN的操作(如:NaN/0)都會返回NaN.

2、NaN與任何值都不相等,包括NaN本身。如:

alert(NaN == NaN);//false

所以Javascript中有一個isNaN()函數(shù),這個函數(shù)接收一個參數(shù),任意類型,它會幫我們確定這個參數(shù)是否”不是數(shù)值”。它會先嘗試先講這個值轉(zhuǎn)為數(shù)值。如果不能被轉(zhuǎn)換為數(shù)值的值在調(diào)用這個函數(shù)之后會返回true,即is  NaN 非數(shù)值。

至于數(shù)值轉(zhuǎn)換,這個內(nèi)容在Javascript中擴(kuò)展開來又是一篇文章,有時間再整理整理。

String類型

字符串可以由單引號或雙引號表示,在Javascript中這兩種引號是等價的,如:

var name = ‘jwy';
var author = “jwy”;

不過就是要注意正確嵌套。

字符串可以直接用字面量賦值。任何字符串的長度都可以通過訪問氣length屬性獲得。

在Javascript中的字符串是不可變的,其實這跟C#中是一樣的,(估計也是為了提高性能),字符串一旦創(chuàng)建,他們的值就不能改變,要改變某個變量保存的字符串,首先要銷毀原來的字符串,然后再用另一個包含信紙的字符串填充該變量。

var name=”jwy”;
name = “jwy”+” study javascript”;

這里一開始name是保存字符串”jwy”的,第二行代碼則將“jwy”+” study javascript”; 值重新賦給name,它先床架一個能容納這個長度的新字符串,然后填充,銷毀原來的字符串。

幾乎每個值都有自己的toString()方法,在后面的文章會解釋這個方法哪里來的,它會返回相應(yīng)值的字符串表現(xiàn)。

var age=11;
var ageToString =age.toString();//”11”

數(shù)值、布爾值、對象和字符串值都有toString(),但是null和undefined值沒有這個方法。

一般來說,調(diào)用toString()方法不必傳遞參數(shù),但是,在調(diào)用數(shù)值的toString方法時,可以傳遞一個參數(shù),用來指定要輸出的數(shù)值的基數(shù)(看是要輸出十進(jìn)制、二進(jìn)制、八進(jìn)制、十六進(jìn)制表示)

由于null和undefined沒有toString方法,在不知道是否是這兩者的情況下調(diào)用是會報錯的,所以還有一條路可以選,就是使用轉(zhuǎn)型函數(shù)String(),它呢就可以接收任何類型的值轉(zhuǎn)為字符串了,處理規(guī)則如下:

1、如果這個值有toString則直接調(diào)用,并返回結(jié)果

2、如果是null,則返回”null”

3、如果是unde,則返回”undefined”

Object 類型

Object類型是Javascript引用類型的鼻祖了,(就跟在C#和Java中是一樣的道理),在創(chuàng)建Object類型的實例后可以為其添加屬性和方法,

var o = new Object;//有效,不推薦
var o =new Object();

 在Javascript中,Object類型所具有的任何屬性和方法也同樣存在于更具體的對象中。

每個實例都有如下的屬性和方法,如下:

1、constructor ,保存著用于創(chuàng)建當(dāng)前對象的函數(shù)。上面構(gòu)造函數(shù)就是Object();

2、hasOwnProperty,用于檢查給定的屬性是否在當(dāng)前對象實例中,是就true,不是在實例中,而是在原型中,則是false;

3、isPrototypeOf,用于檢查傳入的對象是否是另一個對象的原型

4、propertyIsEnumerable,用于檢查給定的屬性是否能夠使用for…in語句來枚舉,

5、toString,返回對象的字符串表示

6、valueOf,返回對象的字符串、數(shù)值或布爾值表示,通常與toString方法返回值相同

以上就是Object所具有的屬性和方法,所有對象都會因為繼承關(guān)系而繼承這些屬性和方法。

結(jié)束語

         Undefined、Null、Boolean、Number、String是javascript中的基本數(shù)據(jù)類型,而Object屬于引用類型。用typeof檢測其他類型會返回相應(yīng)的字符串,但是檢測null或?qū)ο髸r,會返回”object",如果掌握了這些,以后就不會看到這些會點摸不著頭腦了。順帶提一句:

Boolean、Number、String 這三個是Javascript中的基本包裝類型,也就是這三個其實是一個構(gòu)造函數(shù),他們是Function的實例,是引用類型,至于這里的String與文章說的String是同名,是因為其實上文說的String是指字符串,這里的String指的是String這個構(gòu)造函數(shù),上面那么寫,是為了更好的理解,因為Javascript是松散類型的。我們可以看下String實例化的例子:

var name = String("jwy");
alert(typeof name);//"object"
var author = "Tom";
alert(typeof name);//"string"

至于author這個會有l(wèi)ength,substring等等這些方法,其實是String這里的方面,string只是String的一個實例,類似于C#中的String,和string,只不過這里特殊一點。

注意,typeof 變量  如果值是"string" 的話,也就是這個變量是字符串,在Javascript中,字符串是基本類型,而在C#或Java中,字符串是引用類型,但是Javascript中的String是引用類型,因為它是Javascript中定義好的基本包裝類型,在C#中,String跟string其實是一樣的。這個東西有點繞,如果有錯的,大家請指出來,一起交流交流。

JavaScript中的值類型和引用類型

一、擁抱JavaScript

曾經(jīng)名不經(jīng)傳的JavaScript隨著AJAX的流行而身價倍增,現(xiàn)在JavaScript不再僅僅是WEB開發(fā)中一個可有可無的輔助工具,甚至有了專門屬于它的職位“JavaScript工程師”,那怕你僅僅是一名WEB后臺開發(fā)程序員,你都必須了解JavaScript,至少在一些相關(guān)招聘職位要求上你可以看到“熟悉JavaScript優(yōu)先”的字眼。甚至我還要告訴你,你將可以用JavaScript開發(fā)桌面軟件,這得益于Adobe AIR的另外一種開發(fā)模式,即用HTML+CSS+JavaScript開發(fā)AIR。

二、值類型和引用類型話題

隨著部分有大型面向?qū)ο笳Z言基礎(chǔ)朋友的介入,他們試著用JavaScript去模擬面像對象的各種特征,盡管有些模擬顯得較為牽強(qiáng),但也讓我們見識到了JavaScript的強(qiáng)大與靈活性。本文暫不探討JavaScript面向?qū)ο缶幊碳夹g(shù)。就講講JavaScript中的兩種變量類型:即值類型和引用類型,這通常又會讓你聯(lián)想到“堆?!?,另外還有“引用地址”或“指針”相關(guān)概念,有過Java或C#編程經(jīng)驗的人相信對這兩種類型不陌生。下面就舉例講一下這兩種類型在JavaScript中的體現(xiàn)、用法及注意事項。

三、JavaScript值類型和引用類型有哪些

(1)值類型:數(shù)值、布爾值、null、undefined。

(2)引用類型:對象、數(shù)組、函數(shù)。

四、如何理解值類型和引用類型及舉例

我們可以用“連鎖店”和“連鎖店鑰匙”來理解,不知道以下比喻合不合適,^-^。

(1)值類型理解:變量的交換等于在一個新的地方按照連鎖店的規(guī)范標(biāo)準(zhǔn)(統(tǒng)一店面理解為相同的變量內(nèi)容)新開一個分店,這樣新開的店與其它舊店互不相關(guān)、各自運營。

值類型例子

function chainStore()
{
  var store1='Nike China';
  var store2=store1;
  store1='Nike U.S.A.';
  alert(store2); //Nike China
}
chainStore();
//把一個值類型(也可以叫基本類型)store2傳遞給另一個變量(賦值)時,其實是分配了一塊新的內(nèi)存空間,因此改變store1的值對store2沒有任何影響,因為它不像引用類型,變量的交換其實是交換了指像同一個內(nèi)容的地址。

(2)引用類型理解:變量的交換等于把現(xiàn)有一間店的鑰匙(變量引用地址)復(fù)制一把給了另外一個老板,此時兩個老板同時管理一間店,兩個老板的行為都有可能對一間店的運營造成影響。

引用類型例子

function chainStore()
{
  var store1=['Nike China'];
  var store2=store1;
  alert(store2[0]); //Nike China
  store1[0]='Nike U.S.A.';
  alert(store2[0]); //Nike U.S.A.
}
chainStore();
//在上面的代碼中,store2只進(jìn)行了一次賦值,理論上它的值已定,但后面通過改寫store1的值,發(fā)現(xiàn)store2的值也發(fā)生了改變,這正是引用類型的特征,也是我們要注意的地方。

  • JS實現(xiàn)樣式清新的橫排下拉菜單效果

    JS實現(xiàn)樣式清新的橫排下拉菜單效果

    這篇文章主要介紹了JS實現(xiàn)樣式清新的橫排下拉菜單效果,通過簡單的元素遍歷控制頁面元素的動態(tài)切換效果,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-10-10
  • JavaScript實現(xiàn)定時頁面跳轉(zhuǎn)功能示例

    JavaScript實現(xiàn)定時頁面跳轉(zhuǎn)功能示例

    這篇文章主要介紹了JavaScript實現(xiàn)定時頁面跳轉(zhuǎn)功能,涉及javascript結(jié)合時間函數(shù)定時觸發(fā)自定義函數(shù)功能操作技巧,需要的朋友可以參考下
    2017-02-02
  • JS基于clipBoard.js插件實現(xiàn)剪切、復(fù)制、粘貼

    JS基于clipBoard.js插件實現(xiàn)剪切、復(fù)制、粘貼

    這篇文章主要介紹了JS實現(xiàn)剪切、復(fù)制、粘貼——clipBoard.js 的相關(guān)資料,需要的朋友可以參考下
    2016-05-05
  • vue中npm包全局安裝和局部安裝過程

    vue中npm包全局安裝和局部安裝過程

    這篇文章主要介紹了npm包全局安裝和局部安裝過程,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-09-09
  • 正則表達(dá)式基本語法及表單驗證操作詳解【基于JS】

    正則表達(dá)式基本語法及表單驗證操作詳解【基于JS】

    這篇文章主要介紹了正則表達(dá)式基本語法及表單驗證操作,較為詳細(xì)的分析了正則表達(dá)式的基本語法以及基于JS實現(xiàn)的表單正則驗證操作相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2017-04-04
  • css靜態(tài)濾鏡 + A:Hover 效果

    css靜態(tài)濾鏡 + A:Hover 效果

    css靜態(tài)濾鏡 + A:Hover 效果...
    2007-05-05
  • 獲取3個數(shù)組不重復(fù)的值的具體實現(xiàn)

    獲取3個數(shù)組不重復(fù)的值的具體實現(xiàn)

    先用concat拼接數(shù)組 ,再使用一個對象、一個新數(shù)組(用于存放不重復(fù)的數(shù)組)具體實現(xiàn)如下,感興趣的朋友可以參考
    2013-12-12
  • 詳解微信小程序的 request 封裝示例

    詳解微信小程序的 request 封裝示例

    這篇文章主要介紹了詳解微信小程序的 request 封裝示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08
  • javascript引導(dǎo)程序

    javascript引導(dǎo)程序

    本網(wǎng)站的javascript程序架構(gòu)從以下幾個基本點出發(fā)
    2008-10-10
  • 最新評論