日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

javascript 核心概念(1)-数据类型

發(fā)布時間:2023/12/1 javascript 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 javascript 核心概念(1)-数据类型 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

語法

(1)到現(xiàn)在為止,大多數(shù)瀏覽器也還是支持到ECMAScript 第三版的標準。 核心概念就是一個語言的基本工作原理,涉及語法,操作符,數(shù)據(jù)類型。

(2)javascript的一切--變量,函數(shù)名,操作符都區(qū)分大小寫。

按照慣例,標識符采用駝峰大小寫習(xí)慣

?

firstSecond

myCar

doSomethingImportant

?

變量

(1)ECMAScript變量是松散類型的,可以保存任何類型的數(shù)據(jù),而且它不像C#的 var 類型,初始化之后類型,隨著變量值的修改,類型也會修改。

var message = “hi”; //這里一開始保存了一個字符串類型,值是hi。

message = 100;? //現(xiàn)在保存了一個整數(shù)類型,值是100.

?

(2)使用var操作符定義的變量將成為該變量的作用域中的局部變量,如果在函數(shù)中使用var定義一個變量,那么這個變量在函數(shù)退出后將會被銷毀

function test() { var message = "hi"; //局部變量 } test(); alert(message); //undefined 變量message在函數(shù)中使用var定義,當函數(shù)被調(diào)用時,就會創(chuàng)建該變量并為其賦值,出了函數(shù)作用范圍,變量立即被銷魂, 因此下一行代碼會導(dǎo)致錯誤。 ? //下面的例子省略了var操作符,從而創(chuàng)建一個全局變量。 function test(){ message = "hi"; //全局變量 } test(); alert(message); //“hi” 這里省略了var操作符,因而message就成了全局變量,只要調(diào)用過一次test()函數(shù),這個變量就有了定義, 就可以在函數(shù)外部的任何地方被訪問到。 但是這樣的做法不推薦,在局部作用域定義的全局變量很難維護。 ?

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

ECMAScript有5種簡單數(shù)據(jù)類型(或基本數(shù)據(jù)類型): Undefined, Null, Boolean, Number, String 還有一種復(fù)雜數(shù)據(jù)類型Object,Object本質(zhì)上市由一組無序的名值對組成。 (為什么不將Null類型和Object類型歸為一類?這樣概念會清晰一點吧?)

typeof操作符 負責(zé)檢測給定變量的數(shù)據(jù)類型,對一個值使用typeof操作符肯呢過返回下列某個字符串:

“undefined” --如果這個值沒有定義。

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

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

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

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

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

?

Undefined類型

var message; //Undefined類型只有一個值,即特殊的undefined。在使用var聲明變量但未對其加以初始化時,這個量的值就是undefined, alert(message == undefined); //true ? ? var message = undefined; //使用undefined值顯式初始化了變量message, ECMA-262 第三版才引入這個值,為了正式區(qū)分空對象指針和未經(jīng)初始化的變量 alter(message == undefined);//true

?

要注意包含undefined值的變量和尚未定義的變量還是不一樣的,看下面例子:

var message; //這個變量聲明之后默認取得了undefined值 ? //下面這個變量沒有聲明 // var age ? alert(message); //"undefined" alert(age); //產(chǎn)生錯誤

?

對于沒有聲明過的變量,只能執(zhí)行一項操作,即使用typeof操作符檢測其數(shù)據(jù)類型。

但是令人困惑的是, 對未初始化的變量和未聲明的變量執(zhí)行typeof操作符都同樣返回undefined值。 看下面的例子

var message; //這個變量聲明之后默認取得了undefined值 ? //下面這個變量并沒有聲明 // var age ? alert(typeof message); //"undefined" alert(typeof age ); //"undefined"

?

即使未初始化的變量會自動被賦予undefined值,但是顯示地初始化變量依然是明智的選擇, 如果這樣,那么當typeof操作符返回undefined值的時候,我們就知道被檢測的變量還沒有被聲明, 而不是尚未被初始化。

?

Null類型

Null類型是第二個只有一個值的數(shù)據(jù)類型,這個特殊的值是null。從邏輯角度來看, null值表示一個空對象指針,而這也正是使用typeof操作符檢測null值會返回"object”的原因

var car = null; alert(typeof car); // "object"

如果定義的變量準備將來用于保存對象,那么最好將該變量初始化為null,而不是其他值,這樣,只要直接檢查null值就可以知道相應(yīng)的變量是否已經(jīng)保存了一個對象的引用。

?

Boolean類型

Boolean類型只有兩個字面值:true 和 false。 這兩個值與數(shù)字值不是一回事,因此true不一定等于1, false不一定等于0.? 雖然Boolean類型的字面值只有兩個,但是ECMAScript中所有類型的值都有與這兩個Boolean值等價的值。 要將一個值轉(zhuǎn)換為其對應(yīng)的Boolean值, 可以調(diào)用轉(zhuǎn)型函數(shù)Boolean(), 如下例所示:

var message = “Hello world!”;

var messageAsBoolean = Boolean(message);

下面給出各種數(shù)據(jù)類型及其對應(yīng)的轉(zhuǎn)換規(guī)則。 理解這些規(guī)則對理解流控制語句(if)自動執(zhí)行相應(yīng)的Boolean轉(zhuǎn)換非常重要。

數(shù)據(jù)類型轉(zhuǎn)換為true的值轉(zhuǎn)換為false的值
Booleantruefalse
String任何非空字符串“”(空字符串)
Number任何非零數(shù)字值(包括無窮大)0和NaN
Object任何對象null
Undefinedn/aundefined

?

Number類型

ECMAScript中最令人關(guān)注的數(shù)據(jù)類型, 不用記什么IEEE754格式,這些標準真多,下面只是以舉例子的形式理解

?

十進制整數(shù)可以像下面這樣直接在代碼中輸入:

var intNum = 55;? // 整數(shù)

八進制整數(shù)的第一位 必須是零(0),然后是八進制數(shù)字序列(0-7)。如果字面值中的數(shù)值超出范圍,那么前導(dǎo)零將被忽略, 后面的數(shù)值被當做十進制數(shù)值解析。

var octalNum1 = 070;? //八進制的56

var octalNum2 = 079;? //無效的八進制數(shù)值--解析為79

var octalNum3 = 08;?? //無效的八進制數(shù)值--解析為8

十六進制字面值的前兩位必須是0x, 后跟任何十六進制數(shù)字(0-9 及A-F), 其中,A-F可以大寫,也可以小寫。 如下例所示:

var hexNum1 = 0xA;?? //十六進制的10

var hexNum2 = ox1f?? //十六進制的31

進行運算時,八進制和十六進制表示的數(shù)值最終都將轉(zhuǎn)換成十進制數(shù)值。

?

浮點值,必須包含一個小數(shù)點,而且小數(shù)點后面必須至少有一位數(shù)字。

var floatNum1= 1.1;

var floatNum2 = 0.1;

var floatNum3 = .1? //有效,但不推薦

var floatNum4 = 1.; //小數(shù)點后面沒有數(shù)字----解析為1

var floatNum5 = 10.0;? //整數(shù)----解析為10

對于極大極小的數(shù)值,可以用e表示法表示的浮點表示

var floatNum = 3.125e7 //等于31250000

浮點數(shù)值的最高精度是17位小數(shù),但是進行算術(shù)運算的時候其精度遠不如整數(shù), 如0.1+0.2 結(jié)果不是0.3而是0.3000000000000004.

?

NaN 即(Not a Number)是一個特殊的數(shù)值, 這個數(shù)值用于表示一個本來要返回數(shù)值的操作數(shù)未返回數(shù)值的情況。
NaN的特點,首先涉及NaN的操作都會返回NaN, 例如NaN/10, 其次NaN與任何值都不相等,包括NaN本身。

?

數(shù)值轉(zhuǎn)換

有三個函數(shù)可以把非數(shù)值轉(zhuǎn)換成為數(shù)值: Number(), parseInt()? 和parseFloat()。

Number()可以用于任何數(shù)據(jù)類型,而另外兩個則用于把字符串轉(zhuǎn)換成數(shù)值

Number()函數(shù)的轉(zhuǎn)換規(guī)則如下.

  • 如果是Boolean值, true和false將分別轉(zhuǎn)換為1和0;
  • 如果是數(shù)字值,只是簡單的傳入和返回
  • 如果是null,? 返回0;
  • 如果是unefined, 換回NaN;
  • 如果是字符串, 遵循下列規(guī)則:
    • 如果字符串中只包含數(shù)字,則將其轉(zhuǎn)換為十進制數(shù)值, 即“1”會變?yōu)?, “123”會變?yōu)?23,”011”會變?yōu)?1(前導(dǎo)零被忽略);
    • 如果字符串中包含有效的浮點格式,如“1.1”, 則將其轉(zhuǎn)換為對應(yīng)的浮點數(shù)值(同樣,也會忽略前導(dǎo)零);
    • 如果字符串中包含有效的十六進制格式,例如“0xf”,則將其轉(zhuǎn)換為相同大小的十進制整數(shù)值;
    • 如果字符串是空的(不包含任何字符),則將其轉(zhuǎn)換為0;
    • 如果字符串中包含除上述格式之外的字符,則將其轉(zhuǎn)換為NaN。
  • 如果是對象,則調(diào)用對象的valueOf()方法, 然后依照前面的規(guī)則轉(zhuǎn)換返回的值,如果轉(zhuǎn)換的結(jié)果是NaN, 則調(diào)用對象的toString()方法,然后再次依照前面的規(guī)則轉(zhuǎn)換返回的字符串值。

parseInt()函數(shù)的轉(zhuǎn)換規(guī)則

他會忽略字符串前面的空格,知道找到一個非空格字符,如果第一個字符不是數(shù)字字符或者負號, parseInt()就會返回NaN, 也就是說, 用parseInt轉(zhuǎn)換空字符會返回NaN,(相對于Number()對空字符返回0)。 如果字符串以“0x”開頭且跟數(shù)字字符,就會將其當做一個十六進制整數(shù),如果字符串以“0”開頭且后跟數(shù)字字符, 則會將其當做一個八進制數(shù)來解析。

下面是例子:

var num1 = parseInt(“1234blue”);? //1234

var num2 = parseInt(“”); //NaN

var num3 = parseInt(“0xA”);? //10 (十六進制數(shù))

var num4 = parseInt(22.5);?? //22

var num5 = parseInt(“070”);?? //56 (八進制數(shù))

var num6 = parseInt(“70”);??? //70(十進制數(shù))

var num7 = parseInt(“0xf”);?? //15(十六進制數(shù))

如果要知道解析的值是十六進制格式的字符串,那么指定基數(shù)16作為第二個參數(shù),可以保證得到正確的結(jié)果,例如:

var num = parseInt(“0xAF”, 16);??? //175

如果指定了16作為第二個參數(shù),字符串可以不帶前面的“0x“,如下所示:

var num1 = parseInt(“AF”, 16);??? //175? 第二個參數(shù)16明確告訴parseInt()要解析一個十六進制格式的字符串。

var num2 = parseInt(“AF”);???????? //NaN

而指定基數(shù)會影響到轉(zhuǎn)換的輸出結(jié)果。 例如

var num1 = parseInt(“10”, 2);?? //2 (按二進制解析)

var num2 = parseInt(“10”, 8);?? //8 (按八進制解析)

var num3 = parseInt(“10”,10);?? //10 (按十進制解析)

var num4 = parseInt(“10”,16);?? //16 (按十六進制解析)

ParseFloat()也是從第一個字符(位置0)開始解析每個字符。而且也是一直解析奧字符串末尾, 或者解析到遇見一個無效的浮點數(shù)字符為止。 字符串中的第一個小數(shù)點事有效的,第二個小數(shù)點是無效的,它后面的字符串將被忽略。 “22.34.5”將會被轉(zhuǎn)換為22.34.

第二點是parseFloat始終會忽略前導(dǎo)零, parseFloat只解析十進制值,因此沒有第二個指定參數(shù)作為基數(shù)的用法。

var num1 = parseFloat(“1234blue”);? //1234 (整數(shù))

var num2 = parseFloat(“0xA”);? //0 十六進制數(shù)始終會轉(zhuǎn)換為零

var num3 = parseFloat(“22.5”);? //22.5

var num4 = parseFloat(“22.34.5”); //22.34

var num5 = parseFloat(“0908.5”);? //908.5

var num6 = parseFloat(“3.125e7”); //31250000

?

String類型

string類型用于表示由0個或多個16位Unicode字符組成的字符序列,即字符串。 字符串可以由雙引號(“)或單引號(‘)表示,

var firstName = “Nicholas”;

var lastName = ‘Zakas’;

以上兩種寫法完全相同,

要把一個值轉(zhuǎn)換為一個字符串有兩種方式,第一種使用幾乎每個值都有的toString()方法,這個方法要做的就是返回相應(yīng)值得字符串表現(xiàn)。

var age = 11;

var ageAsString? = age.toString(); //字符串”11”

var found = true;

var foundAsString = found.toString();? //字符串”true”

數(shù)值,布爾值,對象,和字符串值(每個字符串也都有一個toString()方法, 該方法返回字符串的一個副本)都有一個toString方法,null 和undefined值沒有這個方法。

在不知道要轉(zhuǎn)換的值是不是null或undefined的情況下,可以使用轉(zhuǎn)型函數(shù)String(),將任何類型的值轉(zhuǎn)換為字符串,String()函數(shù)遵循下列規(guī)則:

  • 如果值有toString()方法,則調(diào)用該方法(沒有參數(shù))并返回相應(yīng)的結(jié)果;
  • 如值是null, 則返回“null”;
  • 如果值是undefined,則返回“undefined”。

下面看幾個列子;

var value1 = 10;

var value2 = true;

var value3 = null;

var value4 ;

alert(String(value1)) ; //”10”

alert(String(value2)); //”true”

alert(String(value3)); //”null”

alert(String(value4")); //”undefined”

?

Object類型

ECMAScript中的對象就是一組數(shù)據(jù)和功能的集合。 對象可以通過執(zhí)行new操作符后跟要創(chuàng)建的對像類型名稱來創(chuàng)建。 而創(chuàng)建Object類型的實例并為其添加屬性和(或)方法,就可以創(chuàng)建自定義對象。 如下:

var o = new Object();

僅僅創(chuàng)建Object的實例并沒有什么用處, 關(guān)鍵是要理解一個重要的思想:即在ECMAScript中,Object類型是它所有實例的基礎(chǔ)。 也就是說,Object類型所具有的任何屬性和方法也同樣存在于更具體的對象中。

Object每個實例都具有下列屬性和方法:

  • constructor--保存著用于創(chuàng)建當前對象的函數(shù)。 對于前面的例子而言構(gòu)造函數(shù)就是Object();
  • hasOwnProperty(propertyName)--用于檢查給定的屬性在當前對象實例中是否存在。 其中,作為參數(shù)的屬性名(propertyName)必須以字符串形式指定。(例如: o.hasOwnProperty(“name”))
  • isPrototypeOf(object) --用于檢查傳入的對象是否是另一個對象的原型
  • propertyIsEnumerable(propertyName) --用于檢查給定的屬性是否能夠使用for-in語句(本章后面將會討論)來枚舉。 與hasOwnProperty()方法一樣,作為參數(shù)名的屬性名必須以字符串形式指定。
  • toString()--返回對象的字符串表示;
  • valueOf()--返回對象的字符串, 數(shù)值或布爾值表示。 通常與toString()方法的返回值相同。

?

Javascript類型的內(nèi)容到此為止

轉(zhuǎn)載于:https://www.cnblogs.com/grkin/p/3360488.html

總結(jié)

以上是生活随笔為你收集整理的javascript 核心概念(1)-数据类型的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。