JavaScript初學者不知道的事(二)
本文我們主要和大家分享javascript的基本語法和資料類型,當然還是最基礎的不過多贅述,希望剛入門的同學還是看一下為好,不是看到這個標題覺得不就是語法和資料類型麼,就那麼點知識,早就會了。
1關鍵字和保留字
ECMA-262 描述了一組具有特定用途的關鍵字。這些關鍵字可用來表示控制語句的開始或結束,或用於執行特定操作等。依照規則,關鍵字也是語言保留的,不能用來當識別符。以下就是ECMAScript的全部關鍵字(有*號上標的是第5 版新增的關鍵字):
break | #do | instanceof | #typeof |
---|---|---|---|
##case | else | new | var |
catch | #finally | return | void |
continue | for | # #switchwhile | |
function | this | with | |
ECMA-262 也描述了另外一組不能用來當作識別符的保留字。儘管保留字在這門語言中還沒有任何特定的用途。但它們有可能在將來被用作關鍵字。以下是ECMA-262 第3 版定義的全部保留字:
#abstract | ##enum | int | short |
---|---|---|---|
boolean | export | interface | static |
extends | #long | super | |
final | native | #synchronized | |
float | package | throws | |
goto | private | transient | |
#implements | protected | #volatile | |
---|---|---|---|
import | public |
在嚴格模式下,第5 版也對下列保留字施加了限制:
implements | package | public | #interface |
---|---|---|---|
private | static | #let | protected |
yield |
注意, let 和yield 是第5 版新增的保留字;其他保留字都是第3 版定義的。為了最大程度地確保相容性,建議大家將第3 版定義的保留字外加let 和yield 作為程式設計時的參考。
在實作ECMAScript 3 的JavaScript 引擎中使用關鍵字作標識符,會導致」Identifier Expected」錯誤。而使用保留字作標識符可能會也可能不會導致相同的錯誤,這取決於特定的引擎。
第5 版對使用關鍵字和保留字的規則進行了少許修改。關鍵字和保留字雖然仍然不能作為標識符使用,但現在可以用作物件的屬性名。一般來說,最好不要使用關鍵字和保留字作為識別碼和屬性名,以便與未來的ECMAScript 版本相容。
除了上面列出的保留字和關鍵字,ECMA-262 第5 版對eval 和arguments 也施加了限制。在嚴格模式下,這兩個名字也不能作為識別符或屬性名,否則會拋出錯誤。
2資料型別
ECMAscript有五種簡單資料型別(也叫基本的資料型別):Undefined .Boolean,String, Null,Number.還有一種複雜的資料型別(有時候也叫引用資料型別)–Object,Object本質上是一組無序的鍵值對組成的。 ECMAscript不支援任何建立自訂類型的機制,而所有的值都是上述的六種資料類型之一。
typeof
這個運算子(這裡說的不是函數,因為它不是一個函數)一般是在調試的時候使用,它的回傳值有六個:undefined(值為定義),boolean(布林值),string(字串),number(數字),object(這個值是物件或null),function(這個值是函數)。
對應於正規表示式而言,他其實也是物件(RegExp類型的物件)的另一種形式,但是對於Chrome7和safari5之前的版本傳回的是function其他的瀏覽器回傳的是object
下面我們來看一個簡單的例子
var msg; //如果没有赋值,默认是undefinedtypeof msg; //undefined// age 没有定义typeof age; //undefined
這個結果又邏輯上的合理性。因為雖然這兩個變數從技術角度來看是有本質的區別的,但是實際上那種變數都是不可能執行真正的操作的。
即使未初始化的變數會自動被賦值為undefined,但是顯示的初始化變數仍然是明智的選擇,如果能過做到這一點,那麼當typeof操作符返回的是undefined的時候,我們就能確定這個變數還沒有被宣告
null和undefined的關係
console.log(undefined == null) // trueconsole.log(undefined === null) // false
實際上undefined值是由null衍生出來的,這是因為在ECMA-262中規定他們的相等性要回傳true。
儘管null和undefined有這樣的關係,但是他們的用途是完全不同的,在任何情況下都沒有必要把一個變數的值設定為undefined但是同樣夫人規則對應於null就是不合適的。以為只要意在保存物件變數還沒有保存真正的變數的時候,就應該要明確的讓變數保存null。這樣做不僅可以體現null作為空指標的慣例,而且能進一步的區分null和undefined
#Number類型
Number類型應該是ECMAscript中最令人關注的資料類型了,這種類型是使用的IEEE754來表示整數和浮點數值
var num1 = 070; //表示八进制数var num2 = 079 //无效的八进制数 表示79var num3 = 0x1f //十六进制数
八進位的字面量在嚴格模式下是無效的,會導致javascript引擎報錯
浮點數數值
<span style='font-family: 微软雅黑, "Microsoft YaHei";'>var f1 = 0.1; <br>var f2 = .1; //虽然是有效的0.1但是不推荐var f3 = 1.0; //会自动转换为1</span>
對於有些極大的或是極小的數值也可以用科學計數法表示,
var f4 = 3.125e7; //31250000
在这里还是要提示一下众所周知的浮点数不能比较相等法则,
在javascript中浮点数的最高精度是17位的小数,但在进行算术计算的时候精确度远远不如整数,例如0.1+0.2不等于0.3而是等于0.0000000000000004(4e-17)
这是使用基于IEEE754数据浮点计算的通病
数据范围
由于内存的限制,ECMAscript并不能保存世界上所有的数,能保存的数能在浏览器中显示出来(通过Number.MAX_VALUE),最小值是(Number.MIN_VALUE)
当超出这个范围的时候,大于就变为Infinity,小于就变为-Infinity
<span style='font-family: 微软雅黑, "Microsoft YaHei";'>var big = Number.MAX_VALUE + Number.MAX_VALUE;<br>console.log(big); //Infinity</span>
可以使用isFinite()函数判断这个值是否在最大值和最小值之间,如果在就返回true
通过访问Number.NEGATIVE_INFINITY和Number.POSITIVE_INFINITY来得到-Infinity和Infinity
NaN
NaN,非数值类型(Not a Number)是一个特殊的值,这个数值表示一个应该返回数值的情况结果没有返回数值,在ECMAscript中,任何数值除以0并不会导致错误,会返回一个NaN,因此并不会影响代码的运行。
Nan本身有两个特点:任何设置NaN的操作都会返回NaN,这个特点在多步计算的时候可能导致错误,其次Nan和任何数值都不想等,包括本身:
<span style='font-family: 微软雅黑, "Microsoft YaHei";'>console.log(NaN == Infinity)<br>console.log(NaN == 1)<br>console.log(NaN == NaN)<br>console.log(NaN == 1/0)//以上结果返回的都是false//下面是判断数据类型isNaN(NaN) //trueisNaN('123') //false,进行了数据类型的转换isNaN('f5') //trueisNaN(4) //false</span>
运用isNaN()函数可以判断这个变量是否是NaN类型的。
最神奇的是isNaN也是支持对象操作的,在基于对象调用isNaN函数时,会首先调用对象的valueOf方法,然后确定该方法返回的值是否可以转换为数值,如果不能就基于这个返回值再调用toString()方法,在测试返回值
string
对应于string类型,讨论的会比较少一点,string类型用于友零或者多个16位的Unicode字符组成的字符序列,即字符串。js中的单引号和双引号是没有区别的(想对于PHP来讲)。
字符字面量
转义的只是在这里就不多说了,
字面量在这里只说一点:
var text = "this is \u30a3"这个的长度是9因为\u30a3转义后表示一个字符
字符串的特点
字符串在我们平常的开发当中我们是一直在用的,但是很少人知道其中的原理,下面我们就来讨论一下字符串的特点。
ECMAscript中的字符串是不可变的,也就是说,字符串一旦被创建,他们的值就不能被改变。要改变某个变量保存的字符串就先要销毁原来的字符串,然后用一个新的值来填充该变量,例如下面的代码:
var lang = 'java';
lang = lang + 'script';
以上的代码是变量lang中包含字符串‘java’。而第二行代码把lang的值重新定义为‘java’与’script’的结合,实际上这个操作过程如下:
1. 首先创建一个能容纳10个字符的新字符串
2. 然后将这个字符串中填充’java’和’script’
3. 最后一步是销毁原来的’java’字符串和’script’字符串,因为这两个字符串已经没用了
转换为字符串
在这里主要注意的是null和undefined是没有toString()方法的,如果想要把他们转换为字符串可以使用转型函数String(),能把任何类型的值转换为字符串var val = null;String(val)
当使用数值转换为字符串的时候,可以在toString()传递一个参数,表示把数值变为多少进制的字符串:var num = 10;num.toString(2)返回的是1010;
4 Object类型
ECMAscript中对象其实就是一组数据和功能的集合。
三种实例化一个对象的方法:
var o = new Ocject();var o = new Object;//不推荐使用var o = {};//当今最常用的
object中的对象和属性在后面我们在去讨论
5 JavaScript中+的作用
这个我们在这里说的具体一点
1. 加法运算
console.log(1+2)
字符串的连接
<span style='font-family: 微软雅黑, "Microsoft YaHei";'>var a ="121",<br> b =56,<br> c ="ss";<br>console.log(a+b);//12156console.log(a+c);//121ss</span>
数值和字符串之间的转换
<span style="font-family: 微软雅黑, "Microsoft YaHei";">//字符串转换我数值var a = "21212";<br/>+a //21212var b = "ss";<br/>+a //NaNvar c= "0xff";<br/>+a //255</span>
<span style="font-family: 微软雅黑, "Microsoft YaHei";">//数值转换为字符串var a =45;<br/>+a; //"45"</span>
//布尔值的转换+true //1+fasle //0
6 javascript中-的作用
减号的作用一般是都是用在正规的操作(也就是类型相同)的操作中,信息量虽然不是很大,但是还是有很多需要注意的地方,下面来举几个例子
var a = 5-true; //4 ,true被转换了var b = NaN -1;//NaNvar c= 5-2 //3var d = 5-"2";//3 “2”被转换为2var e = 5-null; //5 null被转换为了0
7 相等操作符
在我们编程的时候,当使用比较的时候我们希望,有的时候类型不同可以数值一样就可以就好像(2和"2")是可以相等的,但是有时候我们希望要求数值和类型都是一样的才返回真。这就很矛盾了,在ECMAscript中的解决方案是提供两组操作数:相等和全等
相等:先转换在比较
列出一下比较特殊的比较结果
表达式 | 值 |
---|---|
null == undefined | true |
“NaN” == NaN | false |
NaN == NaN | false |
NaN != NaN | true |
true == 2 | false |
undefined == 0 | false |
null == 0 | false |
全等:仅比较不转换
全等就比较严格了,在这里就不讨论什么了。
注意:null == undefined会返回true,但是null === undefined会返回false,这是由于他们的类型不一样
8 函数
函数对于任何语言来说都是一个核心的概念。
在这里主要说一个问题,细节会在后面继续讨论
我们都是知道在函数中的arguments表示所有传进来的参数,比如说
<span style="font-family: 微软雅黑, "Microsoft YaHei";">function foo(a,b,c){<br/> console.log(arguments[2] === c);//true}</span>
这个原因并不因为他们指向的是同一块内存,因为他们内存空间的值会相互同步,
arguments的值是不能被改写的如果改写的会操作
相关推荐:
以上是JavaScript初學者不知道的事(二)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

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

如何使用WebSocket和JavaScript實現線上語音辨識系統引言:隨著科技的不斷發展,語音辨識技術已成為了人工智慧領域的重要組成部分。而基於WebSocket和JavaScript實現的線上語音辨識系統,具備了低延遲、即時性和跨平台的特點,成為了廣泛應用的解決方案。本文將介紹如何使用WebSocket和JavaScript來實現線上語音辨識系

WebSocket與JavaScript:實現即時監控系統的關鍵技術引言:隨著互聯網技術的快速發展,即時監控系統在各個領域中得到了廣泛的應用。而實現即時監控的關鍵技術之一就是WebSocket與JavaScript的結合使用。本文將介紹WebSocket與JavaScript在即時監控系統中的應用,並給出程式碼範例,詳細解釋其實作原理。一、WebSocket技

從初學者到專家:五個必備的C語言編譯器推薦隨著電腦科學的發展,越來越多的人對程式語言充滿了興趣。而C語言作為一門廣泛應用於系統層級程式設計的高階語言,一直受到了程式設計師們的喜愛。為了寫出高效率、穩定的程式碼,選擇一款適合自己的C語言編譯器是很重要的。本文將介紹五個必備的C語言編譯器,供初學者和專家們參考選擇。 GCCGCC,即GNU編譯器集合,是最常用的C語言編譯器之一

JavaScript和WebSocket:打造高效的即時天氣預報系統引言:如今,天氣預報的準確性對於日常生活以及決策制定具有重要意義。隨著技術的發展,我們可以透過即時獲取天氣數據來提供更準確可靠的天氣預報。在本文中,我們將學習如何使用JavaScript和WebSocket技術,來建立一個高效的即時天氣預報系統。本文將透過具體的程式碼範例來展示實現的過程。 We

JavaScript教學:如何取得HTTP狀態碼,需要具體程式碼範例前言:在Web開發中,經常會涉及到與伺服器進行資料互動的場景。在與伺服器進行通訊時,我們經常需要取得傳回的HTTP狀態碼來判斷操作是否成功,並根據不同的狀態碼來進行對應的處理。本篇文章將教你如何使用JavaScript來取得HTTP狀態碼,並提供一些實用的程式碼範例。使用XMLHttpRequest

C++和Python,哪個比較適合初學者?在這個資訊化浪潮席捲全球的時代,程式設計能力已成為一項必備技能。而在學習程式設計的過程中,選擇適當的程式語言顯得格外重要。在眾多程式語言中,C++和Python都是備受初學者關注的兩大熱門選擇。那麼,C++和Python到底哪個比較適合初學者呢?以下將從各方面對比兩者的優劣,以及為什麼選擇某種語言更有助於初學者的程式設計入門

初學者指南:如何用Pandas讀取HTML表格資料引言:在資料處理與分析中,Pandas是一個強大的Python函式庫。它提供了靈活的資料結構和資料分析工具,使得資料處理變得更加簡單有效率。 Pandas不僅可以處理CSV、Excel等格式的數據,還可以直接讀取HTML表格數據。本文將介紹如何使用Pandas函式庫讀取HTML表格資料的方法,提供具體的程式碼範例,幫助初學

JavaScript中的HTTP狀態碼取得方法簡介:在進行前端開發中,我們常常需要處理與後端介面的交互,而HTTP狀態碼就是其中非常重要的一部分。了解並取得HTTP狀態碼有助於我們更好地處理介面傳回的資料。本文將介紹使用JavaScript取得HTTP狀態碼的方法,並提供具體程式碼範例。一、什麼是HTTP狀態碼HTTP狀態碼是指當瀏覽器向伺服器發起請求時,服務
