搜尋
首頁web前端js教程JavaScript基本資料型別及值型別及引用型別_javascript技巧

在JavaScript中四種基本的資料類型:數值(整數和實數)、字串型(以「」號或''括起來的字元或數值)、布林型(使True或False表示)和空值。在JavaScript的基本型別中的資料可以是常數,也可以變數。由於JavaScript採用弱類型的形式,因而一個資料的變數或常數不必先作聲明,而是在使用或賦值時確定其資料的類型的。當然也可以先聲明該資料的類型,它是透過在賦值時自動說明其資料類型的。

javascript中的變數

      javascript中的變數只是一個佔位符,前言已經說過了,因為鬆散類型的緣故。 

定義變數:

var name;

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

var name =”jwy”; //javascript 中的单引号和双引号没有区别,不过要注意正确嵌套
name=10;

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

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

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

每個語句加分號是很好的程式設計習慣。不過一條多個變數時,建議換行和縮排,這樣可以提高可讀性。

簡單資料型別

      ECMAScript中有5種簡單資料型別:Undefined,Null,Boolea,Number和String。還有一種複雜資料型別—Object

typeof操作符

      由於Javascript中的變數是鬆散類型的,所以它提供了一種檢測當前變數的資料類型的方法,也就是typeof關鍵字,在上面提到的ECMAScript中的5種簡單資料類型中,(記住,這5種只是資料型,代表一種資料型,就想C#中的int,string型別一樣),透過typeof關鍵字,對這5種資料型別會傳回下面的值(以字串形式顯示

「undefined」    ----------   若未定義值                     

「boolean」      ----------     若此數值為布林值              Boolean

「string」        ----------     此值為字串              String

「number」      ----------     若此數值為數值型別           Number

「object」        ----------     若此數值為物件或null        Object

「function」       ----------     若此價值為函數                不過嚴格來說,函數在ECMAScript中是對象,每個函數都是Function這個類別的一個實例,既然函數是一個對象,那麼它也就是一個引用型別了,所以一個函數只是一個變數名而已,因此,在很多場合常常可以看到,將函數名作為參數,傳進函數中,然後進行調用,這就類似於C#中的委託,在後面會詳細的講解函數這個東西,畢竟Javascript中很多東西都依賴函數來實現。

Undefined 類型

      上面說了,5種類型是資料型,所以資料型態是有值的,Undefined的值就是undefined,注意,是u是小寫的。如果宣告變數卻沒有初始化,則目前變數的值就是undefined。不過,一般建議盡量給變數初始化,但是在早期的Javascript版本中是沒有規定undefined這個值的,所以在有些框架中為了兼容舊版瀏覽器,會給window對象添加undefined值,如下:

简单的说就是给window对象的undefined属性赋上undefined,在较老的浏览器对象并没有undefined这个属性,所以如果使用到undefined的操作将会导致失常,故采用这样的方式,不过一开始看会有点难理解,在旧版本的浏览器中会因为没有window.undefined这个对象而返回一个undefined值,所以这样做可以兼容旧浏览器。

不过包含undefined值的变量与未定义的变量是不一样的,如:

var name;
alert(name);//undefined
alert(age);// 错误:age is not defined

还没声明过的变量只能执行一项操作,其他全都不能做,就是使用typeof操作符检测其数据类型。

如果不管声明过未初始化以及未声明过的变量执行typeof都是返回undefined的值。两种变来那个都不能执行真正的操作

Null类型

      Null类型的值是null,它表示一个空对象指针,没有指向任何对象,如果一个变量的值是null,那当前变量很有可能就是垃圾收集的对象,使用typeof监测null值时会返回”object”,

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

建议:如果变量是要用来保存对象的额,则初始化为null,这样到时就可以检测该变量是否已经保存了一个对象的引用的,

注意:undefined值是派生自null的,所以对他们执行相等测试会返回true,如:

alert(null == undefind);//true

尽管如此,但是他们用途完全不同,无论在什么情况下都没必要将一个变量的值显示设为undefined,但是这个规则对null却不适用。

Boolean类型

      这个类型只有两个值:true 和false。虽然只有两个值,但是javascript中所有类型的值都有与这两个值等价的值。要将一个值转换为对应的Boolean值,可以调用转型函数Boolean()  (其实Boolean ,Object,String,Number,Function等这些都是一个函数,构造函数,同样也可以理解为一个类,用类型调用toString()方法会返回这样的东西:

"function Function() { [native code] }"  ,Function会相应的改成各自的那个调用函数   )

其实在 if 语句判断中,会对里面的条件自动执行Boolean变化的。

Number类型

      数值类型有很多值,最基本的当然就是十进制啦,如:     

var num=510;

除了十进制,整数还可以通过八进制或十六进制,其中八进制字面值第一位必须是0,然后是八进制数字序列,如果字面值中的数值超出了范围,那么前导零将被忽略。后面的额数值将被当做十进制数解析。

var num1=070;//八进制的56
var num2 =079;//无效的八进制—解析为79
var num3 =08;// 无效的八进制—解析为8

而十六进制前面则必须是0x,后跟十六进制数字(0~F),不分大小写。如:

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

虽然可以表示为八进制和十六进制,但是计算时会被转换成十进制值。

除了整数,还有浮点数值,当然了,没有像其他强类型语言中的float之类的关键字了。

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

在保存整数时内存分配大小只有浮点数的1/2,所以当浮点数可以转换为整数时,javascript会自动转换为整数。

当然了,除了这些数值比较小的,还有一些极大或极小的数值,可以用科学计数法表示,

var num=123.456e10;

浮点数值的最高精度是17位小数,但是计算时其精确度远远不如整数。例如 ,0.1+0.2不等于0.3,而是0.3000000000000004,所以在做判断时,千万不要用浮点数相加判断等于预想中的某个值。

在javascript中数值最小的是Number.MIN_VALUE,这里可以想象成Number是一个类,而MIN_VALUE 是一个静态变量,储存最小值,同样,最大的是Number.MAX_VALUE。

如果计算中超出了这个最大值和最小值范围,则将被自动转换成Infinity值,如果是负数,就是-Infinity,整数就是Infinity,Infinity的意思是无穷,也就是正负无穷,跟数学中的概念是一样的。但是Infinity是无法参与计算的。可以用原生函数确定是不是有穷:isFinite();只有位于数值范围内才会返回true。

在Javascript中数值除了那些普通的整数、浮点数、最大值、最小值、无穷之外呢,还有一个特殊的值,就是NaN。这个数值用于表示一个本来要返回数值的操作数未返回数值的情况。比如,在C#中任何数值除以0都会报错,抛出异常,但是在Javascript中,任何数值除以0会返回Nan,因此不会影响代码的执行。

NaN的特点:

1、任何设计NaN的操作(如:NaN/0)都会返回NaN.

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

alert(NaN == NaN);//false

所以Javascript中有一个isNaN()函数,这个函数接收一个参数,任意类型,它会帮我们确定这个参数是否”不是数值”。它会先尝试先讲这个值转为数值。如果不能被转换为数值的值在调用这个函数之后会返回true,即is  NaN 非数值。

至于数值转换,这个内容在Javascript中扩展开来又是一篇文章,有时间再整理整理。

String类型

字符串可以由单引号或双引号表示,在Javascript中这两种引号是等价的,如:

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

不过就是要注意正确嵌套。

字符串可以直接用字面量赋值。任何字符串的长度都可以通过访问气length属性获得。

在Javascript中的字符串是不可变的,其实这跟C#中是一样的,(估计也是为了提高性能),字符串一旦创建,他们的值就不能改变,要改变某个变量保存的字符串,首先要销毁原来的字符串,然后再用另一个包含信纸的字符串填充该变量。

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

这里一开始name是保存字符串”jwy”的,第二行代码则将“jwy”+” study javascript”; 值重新赋给name,它先床架一个能容纳这个长度的新字符串,然后填充,销毁原来的字符串。

几乎每个值都有自己的toString()方法,在后面的文章会解释这个方法哪里来的,它会返回相应值的字符串表现。

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

数值、布尔值、对象和字符串值都有toString(),但是null和undefined值没有这个方法。

一般来说,调用toString()方法不必传递参数,但是,在调用数值的toString方法时,可以传递一个参数,用来指定要输出的数值的基数(看是要输出十进制、二进制、八进制、十六进制表示)

由于null和undefined没有toString方法,在不知道是否是这两者的情况下调用是会报错的,所以还有一条路可以选,就是使用转型函数String(),它呢就可以接收任何类型的值转为字符串了,处理规则如下:

1、如果这个值有toString则直接调用,并返回结果

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

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

Object 类型

Object类型是Javascript引用类型的鼻祖了,(就跟在C#和Java中是一样的道理),在创建Object类型的实例后可以为其添加属性和方法,

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

 在Javascript中,Object类型所具有的任何属性和方法也同样存在于更具体的对象中。

每个实例都有如下的属性和方法,如下:

1、constructor ,保存着用于创建当前对象的函数。上面构造函数就是Object();

2、hasOwnProperty,用于检查给定的属性是否在当前对象实例中,是就true,不是在实例中,而是在原型中,则是false;

3、isPrototypeOf,用于检查传入的对象是否是另一个对象的原型

4、propertyIsEnumerable,用于检查给定的属性是否能够使用for…in语句来枚举,

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

6、valueOf,返回对象的字符串、数值或布尔值表示,通常与toString方法返回值相同

以上就是Object所具有的属性和方法,所有对象都会因为继承关系而继承这些属性和方法。

结束语

         Undefined、Null、Boolean、Number、String是javascript中的基本数据类型,而Object属于引用类型。用typeof检测其他类型会返回相应的字符串,但是检测null或对象时,会返回”object",如果掌握了这些,以后就不会看到这些会点摸不着头脑了。顺带提一句:

Boolean、Number、String 这三个是Javascript中的基本包装类型,也就是这三个其实是一个构造函数,他们是Function的实例,是引用类型,至于这里的String与文章说的String是同名,是因为其实上文说的String是指字符串,这里的String指的是String这个构造函数,上面那么写,是为了更好的理解,因为Javascript是松散类型的。我们可以看下String实例化的例子:

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

至于author这个会有length,substring等等这些方法,其实是String这里的方面,string只是String的一个实例,类似于C#中的String,和string,只不过这里特殊一点。

注意,typeof 变量  如果值是"string" 的话,也就是这个变量是字符串,在Javascript中,字符串是基本类型,而在C#或Java中,字符串是引用类型,但是Javascript中的String是引用类型,因为它是Javascript中定义好的基本包装类型,在C#中,String跟string其实是一样的。这个东西有点绕,如果有错的,大家请指出来,一起交流交流。

JavaScript中的值类型和引用类型

一、拥抱JavaScript

曾经名不经传的JavaScript随着AJAX的流行而身价倍增,现在JavaScript不再仅仅是WEB开发中一个可有可无的辅助工具,甚至有了专门属于它的职位“JavaScript工程师”,那怕你仅仅是一名WEB后台开发程序员,你都必须了解JavaScript,至少在一些相关招聘职位要求上你可以看到“熟悉JavaScript优先”的字眼。甚至我还要告诉你,你将可以用JavaScript开发桌面软件,这得益于Adobe AIR的另外一种开发模式,即用HTML+CSS+JavaScript开发AIR。

二、值类型和引用类型话题

随着部分有大型面向对象语言基础朋友的介入,他们试着用JavaScript去模拟面像对象的各种特征,尽管有些模拟显得较为牵强,但也让我们见识到了JavaScript的强大与灵活性。本文暂不探讨JavaScript面向对象编程技术。就讲讲JavaScript中的两种变量类型:即值类型和引用类型,这通常又会让你联想到“堆栈”,另外还有“引用地址”或“指针”相关概念,有过Java或C#编程经验的人相信对这两种类型不陌生。下面就举例讲一下这两种类型在JavaScript中的体现、用法及注意事项。

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

(1)值类型:数值、布尔值、null、undefined。

(2)引用类型:对象、数组、函数。

四、如何理解值类型和引用类型及举例

我们可以用“连锁店”和“连锁店钥匙”来理解,不知道以下比喻合不合适,^-^。

(1)值类型理解:变量的交换等于在一个新的地方按照连锁店的规范标准(统一店面理解为相同的变量内容)新开一个分店,这样新开的店与其它旧店互不相关、各自运营。

值类型例子

function chainStore()
{
  var store1='Nike China';
  var store2=store1;
  store1='Nike U.S.A.';
  alert(store2); //Nike China
}
chainStore();
//把一个值类型(也可以叫基本类型)store2传递给另一个变量(赋值)时,其实是分配了一块新的内存空间,因此改变store1的值对store2没有任何影响,因为它不像引用类型,变量的交换其实是交换了指像同一个内容的地址。

(2)引用类型理解:变量的交换等于把现有一间店的钥匙(变量引用地址)复制一把给了另外一个老板,此时两个老板同时管理一间店,两个老板的行为都有可能对一间店的运营造成影响。

引用类型例子

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只进行了一次赋值,理论上它的值已定,但后面通过改写store1的值,发现store2的值也发生了改变,这正是引用类型的特征,也是我们要注意的地方。

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
JavaScript在行動中:現實世界中的示例和項目JavaScript在行動中:現實世界中的示例和項目Apr 19, 2025 am 12:13 AM

JavaScript在現實世界中的應用包括前端和後端開發。 1)通過構建TODO列表應用展示前端應用,涉及DOM操作和事件處理。 2)通過Node.js和Express構建RESTfulAPI展示後端應用。

JavaScript和Web:核心功能和用例JavaScript和Web:核心功能和用例Apr 18, 2025 am 12:19 AM

JavaScript在Web開發中的主要用途包括客戶端交互、表單驗證和異步通信。 1)通過DOM操作實現動態內容更新和用戶交互;2)在用戶提交數據前進行客戶端驗證,提高用戶體驗;3)通過AJAX技術實現與服務器的無刷新通信。

了解JavaScript引擎:實施詳細信息了解JavaScript引擎:實施詳細信息Apr 17, 2025 am 12:05 AM

理解JavaScript引擎內部工作原理對開發者重要,因為它能幫助編寫更高效的代碼並理解性能瓶頸和優化策略。 1)引擎的工作流程包括解析、編譯和執行三個階段;2)執行過程中,引擎會進行動態優化,如內聯緩存和隱藏類;3)最佳實踐包括避免全局變量、優化循環、使用const和let,以及避免過度使用閉包。

Python vs. JavaScript:學習曲線和易用性Python vs. JavaScript:學習曲線和易用性Apr 16, 2025 am 12:12 AM

Python更適合初學者,學習曲線平緩,語法簡潔;JavaScript適合前端開發,學習曲線較陡,語法靈活。 1.Python語法直觀,適用於數據科學和後端開發。 2.JavaScript靈活,廣泛用於前端和服務器端編程。

Python vs. JavaScript:社區,圖書館和資源Python vs. JavaScript:社區,圖書館和資源Apr 15, 2025 am 12:16 AM

Python和JavaScript在社區、庫和資源方面的對比各有優劣。 1)Python社區友好,適合初學者,但前端開發資源不如JavaScript豐富。 2)Python在數據科學和機器學習庫方面強大,JavaScript則在前端開發庫和框架上更勝一籌。 3)兩者的學習資源都豐富,但Python適合從官方文檔開始,JavaScript則以MDNWebDocs為佳。選擇應基於項目需求和個人興趣。

從C/C到JavaScript:所有工作方式從C/C到JavaScript:所有工作方式Apr 14, 2025 am 12:05 AM

從C/C 轉向JavaScript需要適應動態類型、垃圾回收和異步編程等特點。 1)C/C 是靜態類型語言,需手動管理內存,而JavaScript是動態類型,垃圾回收自動處理。 2)C/C 需編譯成機器碼,JavaScript則為解釋型語言。 3)JavaScript引入閉包、原型鍊和Promise等概念,增強了靈活性和異步編程能力。

JavaScript引擎:比較實施JavaScript引擎:比較實施Apr 13, 2025 am 12:05 AM

不同JavaScript引擎在解析和執行JavaScript代碼時,效果會有所不同,因為每個引擎的實現原理和優化策略各有差異。 1.詞法分析:將源碼轉換為詞法單元。 2.語法分析:生成抽象語法樹。 3.優化和編譯:通過JIT編譯器生成機器碼。 4.執行:運行機器碼。 V8引擎通過即時編譯和隱藏類優化,SpiderMonkey使用類型推斷系統,導致在相同代碼上的性能表現不同。

超越瀏覽器:現實世界中的JavaScript超越瀏覽器:現實世界中的JavaScriptApr 12, 2025 am 12:06 AM

JavaScript在現實世界中的應用包括服務器端編程、移動應用開發和物聯網控制:1.通過Node.js實現服務器端編程,適用於高並發請求處理。 2.通過ReactNative進行移動應用開發,支持跨平台部署。 3.通過Johnny-Five庫用於物聯網設備控制,適用於硬件交互。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱工具

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中