javascript 核心概念(1)-數據類型

語法

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

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

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

?

firstSecond

myCar

doSomethingImportant

?

變量

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

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

message = 100;? //現在保存了一個整數類型,值是100.

?

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

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

數據類型

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

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

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

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

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

“number”--如果這個值是數值

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

“function”--如果這個值是函數

?

Undefined類型

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

?

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

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

?

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

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

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

?

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

?

Null類型

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

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

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

?

Boolean類型

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

var message = “Hello world!”;

var messageAsBoolean = Boolean(message);

下面給出各種數據類型及其對應的轉換規則。 理解這些規則對理解流控制語句(if)自動執行相應的Boolean轉換非常重要。

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

?

Number類型

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

?

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

var intNum = 55;? // 整數

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

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

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

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

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

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

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

進行運算時,八進制和十六進制表示的數值最終都將轉換成十進制數值。

?

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

var floatNum1= 1.1;

var floatNum2 = 0.1;

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

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

var floatNum5 = 10.0;? //整數----解析為10

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

var floatNum = 3.125e7 //等于31250000

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

?

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

?

數值轉換

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

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

Number()函數的轉換規則如下.

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

parseInt()函數的轉換規則

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

下面是例子:

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

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

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

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

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

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

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

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

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

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

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

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

而指定基數會影響到轉換的輸出結果。 例如

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)開始解析每個字符。而且也是一直解析奧字符串末尾, 或者解析到遇見一個無效的浮點數字符為止。 字符串中的第一個小數點事有效的,第二個小數點是無效的,它后面的字符串將被忽略。 “22.34.5”將會被轉換為22.34.

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

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

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

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’;

以上兩種寫法完全相同,

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

var age = 11;

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

var found = true;

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

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

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

  • 如果值有toString()方法,則調用該方法(沒有參數)并返回相應的結果;
  • 如值是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中的對象就是一組數據和功能的集合。 對象可以通過執行new操作符后跟要創建的對像類型名稱來創建。 而創建Object類型的實例并為其添加屬性和(或)方法,就可以創建自定義對象。 如下:

var o = new Object();

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

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

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

?

Javascript類型的內容到此為止

轉載于:https://www.cnblogs.com/grkin/p/3360488.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/377742.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/377742.shtml
英文地址,請注明出處:http://en.pswp.cn/news/377742.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

注解的力量 -----Spring 2.5 JPA hibernate 使用方法的點滴整理(五):使用@Component 來簡化bean的配置...

雖然我們可以通過 Autowired 在 Bean 類中使用自動注入功能&#xff0c;但是 Bean 還是在 applicatonContext.xml 文件中通過 <bean> 進行定義 —— 在前面的例子中&#xff0c;我們還是在配置文件中定義 Bean&#xff0c;通過 Autowired為 Bean 的成員變量、方法形參或構…

c語言條件語句示例_PHP中的條件語句和示例

c語言條件語句示例PHP條件語句 (PHP Conditional Statements) While coding, you may get to a point where your results can only be gotten when a condition is valid. We make use of conditional statements. Conditional statements are statements that can only be ex…

十四、聚類實戰——圖片壓縮

對同一像素點值的像素點歸為一類&#xff0c;通過平均值進行取代&#xff0c;從而將圖像進行壓縮并且保證圖像盡可能不失真&#xff0c;關鍵信息仍保留。 from PIL import Image import numpy as np from sklearn.cluster import KMeans import matplotlib import matplotlib.…

步驟菜單使用css3實現

代碼庫&#xff1a;http://thecodeplayer.com/walkthrough/css3-breadcrumb-navigation 有興趣的可以看一下&#xff0c;看完絕對讓你大飽眼福。首先截圖&#xff0c;看效果看著很酷吧&#xff0c;其實實現起來也不是很難&#xff0c;里邊需要用的技術有:box-shadow,計數器&…

【嵌入式系統】STM32串口通信的四種方法(基于RTOS)

目錄1、串行通信的基本參數2、輪詢方式代碼效果3、中斷方式代碼效果4、中斷加上時間戳方式代碼及效果5、DMA空閑中斷方式接收數據1、串行通信的基本參數 串行端口的通信方式是將字節拆分成一個接一個的位再傳輸出去&#xff0c;接收方再將此一個一個的位組合成原來的字符&…

大數據 java 代碼示例_Java變量類型與示例

大數據 java 代碼示例Java變量 (Java variables) Variables are the user-defined names of the memory blocks, and their values can be changed at any time during program execution. They play an important role in a class/program as they help in to store, retrieve…

畢業設計

位置跟蹤系統工作原理&#xff08;博聞網&#xff09; http://science.bowenwang.com.cn/location-tracking.htm Azuma是這樣定義增強現實的 :虛實結合 ,實時交互 ,三維注冊 環境搭建&#xff1a; http://cvchina.net/thread-173-1-1.html http://blog.csdn.net/jdh99/article/…

十五、聚類的評估

一、Given Label 均一性homogeneity&#xff1a;一個簇中只包含一個類別樣本&#xff0c;Precision 完整性completeness&#xff1a;同類別樣本被歸到同一個簇中&#xff0c;Recall 將均一性h和完整性c進行結合(二者加權平均)得到V-Measure&#xff0c;&#xff0c;β為權重 …

SQL SERVER作業的Schedules淺析

SQL SERVER作業的計劃&#xff08;Schedules&#xff09;&#xff0c;如果你沒仔細研究過或沒有應用一些復雜的計劃&#xff08;Schedules&#xff09;&#xff0c;那么你覺得SQL SERVER作業的計劃(Schedules)非常好用&#xff0c;也沒啥問題&#xff0c;但是我要告訴你一個“殘…

leetcode 51. N 皇后 思考分析

目錄題目思考AC代碼題目 n 皇后問題研究的是如何將 n 個皇后放置在 nn 的棋盤上&#xff0c;并且使皇后彼此之間不能相互攻擊。 思考 首先以N4為例&#xff0c;畫出解空間樹的一部分&#xff1a; 根據模板&#xff1a; void backtracking(參數) {if(終止條件){存放結果…

Django實戰(18):提交訂單

前面的內容已經基本上涵蓋了Django開發的主要方面&#xff0c;我們從需求和界面設計出發&#xff0c;創建模型和修改模型&#xff0c;并通過scaffold作為開發的起點&#xff1b;在scaffold的基礎上重新定制模板&#xff0c;并且通過Model類和Form類對用戶輸入的數據進行校驗。我…

No module named ‘tensorflow.examples‘解決方案

想從tensorflow中導入mnist手寫數字數據集&#xff0c;結果報錯 from tensorflow.examples.tutorials.mnist import input_data import tensorflow.compat.v1 as tf tf.disable_v2_behavior()my_mnist input_data.read_data_sets("MNIST_data_bak/", one_hotTrue)&…

julia example_使用Julia中的Example的sign()函數

julia exampleJulia| sign()函數 (Julia | sign() function) sign() function is a library function in Julia programming language, it returns the sign of the given value in the form of -1/1. sign()函數是Julia編程語言中的庫函數&#xff0c;它以-1 / 1的形式返回給…

.NET通用基本權限系統

DEMO下載地址&#xff1a; http://download.csdn.net/detail/shecixiong/5372895 一、開發技術&#xff1a;B/S(.NET C# ) 1、Windows XP以上 (支援最新Win 8) 2、Microsoft Visual Studio 2010/2012 C#.NET 3、.NET Framework 4.0以上 (支援最新4.5版本) 4、SQL Server 2005以…

leetcode 37. 解數獨 思考分析

目錄題目核心思路的不斷細化1、核心框架2、考慮到每個位置的工作3、考慮到到達最后一列、該位置的數已經預置的情況4、判斷是否符合規則的函數5、確定遞歸終止條件確定函數返回值AC代碼題目 編寫一個程序&#xff0c;通過填充空格來解決數獨問題。 一個數獨的解法需遵循如下規…

快速完成兼職外包開發任務

做了很多年的開發相關的工作&#xff0c;做過兼職開發&#xff0c;也做過外包一些開發項目。 兼職人員角色時 正是經歷這些事情時&#xff0c;每次就要提前很費經的跟公司溝通&#xff0c;讓他們把公司內部的svn開發出去&#xff0c;但是就是很難&#xff0c;會涉及到安全各方的…

使用YOLOv5訓練NEU-DET數據集

一、下載YOLOv5源碼和NEU-DET(鋼材表面缺陷)數據集 YOLOv5源碼 NEU-DET(鋼材表面缺陷)數據集 這里的數據集已經經過處理了&#xff0c;下載即可 若通過其他途徑下載的原始數據集標簽為xml格式&#xff0c;需要轉化為txt格式XML轉txt格式腳本 二、數據集準備 NEU-DET(鋼材表…

kotlin獲取屬性_Kotlin程序獲取系統MAC地址

kotlin獲取屬性The task is to get system MAC address. 任務是獲取系統MAC地址。 package com.includehelpimport java.net.InetAddressimport java.net.NetworkInterface//Function to get System MACfun getSystemMac(): String? {return try {val OSName System.getProp…

帶分頁功能的SSH整合,DAO層經典封裝

任何一個封裝講究的是&#xff0c;使用&#xff0c;多狀態。Action&#xff1a;任何一個Action繼承分頁有關參數類PageManage&#xff0c;自然考慮的到分頁效果&#xff0c;我們必須定義下幾個分頁的參數。并根據這個參數進行查值。然后在繼承ServiceManage&#xff0c;Service…

在windows phone Mango中使用原生代碼開發程序

本文不討論創建可執行的exe程序,主要想說明怎么在silverlight程序里面調用由原生代碼所編寫的DLL(C / ARM). 原生代碼可以調用更多的API,但是這并不是說你就能隨意獲得那些你沒有權限的資源,比如,你可以使用CopyFile這個API,但是如果你試圖把文件Copy到\Windows文件夾,就會得到…