新元的無名殺擴(kuò)展教程(一)技能_7數(shù)據(jù)類型及分析,運(yùn)算
前言
在前面的幾期,我們已經(jīng)了解諸多一般技能和特殊技能的格式,并知道了inherit繼承標(biāo)簽的用法。我們在前面幾期已經(jīng)了解了在skill里面許多標(biāo)簽的代表的含義,現(xiàn)在我們來講講語法。
數(shù)據(jù)類型

一.基本數(shù)據(jù)類型
1.Boolean 布爾
布爾,它用于邏輯判斷。有兩種:真,即true,和假,即false。
false和true與0和1對應(yīng)著。
2.Number 數(shù)字
數(shù)字分為兩種,一種為整數(shù),一種浮點(diǎn)數(shù)。
整數(shù)不用提,可以是整數(shù),負(fù)數(shù),0
浮點(diǎn)數(shù),可以理解為小數(shù)。但是,我們知道,電腦只能識別二進(jìn)制的數(shù)字,如果是整數(shù),那沒有問題,如果是浮點(diǎn)數(shù)就會產(chǎn)生誤差。假設(shè)我們有一個十進(jìn)制數(shù)字1.1,我們現(xiàn)在用二進(jìn)制轉(zhuǎn)換器來實(shí)驗(yàn)它的結(jié)果:

我們再把它轉(zhuǎn)化回來

所以,我們不能想當(dāng)然地認(rèn)為0.1+0.1就等于0.2,對于計算機(jī)來說,它就是個假命題。(雖然很詭異,要我們承認(rèn)0.2≠0.2!)
我們也可以用科學(xué)記數(shù)法表示一個數(shù)字,比如,1e2就是1×102,1e-2就是0.01(1×10^-2)。
此外,還有一些特殊的數(shù)字
Number.MAX_VALUE,這是最大的數(shù)字。
Number.MIN_VALUE,這是最接近0的數(shù)字。
Number.POSITIVE_INFINITY或者Infinity,這是無窮大
Number.NEGATIVE_INFINITY或者-Infinity,這是負(fù)無窮大
Number.NaN或者NaN,這是一個非數(shù)字。兩個非數(shù)字并不相等。
3.String字符串
字符串,用""或''將字符引起來就叫字符串。
如"yiji"就是一個字符串,"你好呀"就是一個字符串。
一個字符串從一個"或'開始,直到下一個"或'結(jié)束。單引號雙引號要統(tǒng)一。
要在一個字符串中用"或'請在前面加\比如"\"yiji\" "或者"\'yiji\' "
4.null 空
按字面意思理解就好,即空對象。
5.undefined 未定義
按字面意思理解就好,未定義的都叫undefined。比如你引用了一個不存在的技能,它的值就是undefined
以上為基本數(shù)據(jù)類型,除此之外,還有BigInt和Symbol數(shù)據(jù)類型,在這里不做介紹。

二.復(fù)雜數(shù)據(jù)類型
1.Object對象
我們把外面是{},里面是key:value形式,其中每個key:value以,相連,這就叫做object。
比如
{
key0:value0,
key1:value1,
key2:value2
}
這就叫一個object。
可以這么理解object對象。value是一個數(shù)據(jù),而key是為它起的名字。
要注意的是,key是一個string字符串,但是可以省略引號。
調(diào)出其中的value值方法是:對象名[key值]
比如,我將以上對象命名為object1,如果我要調(diào)出其中的value1值,我們就寫成:
object1["key1"]
創(chuàng)建新的key:value對的方法為:對象名[創(chuàng)建的key值]=創(chuàng)建的value值
比如我們?yōu)閛bject加一個key3:value3對,就寫成:
object["key3"]=value3
這里的""雙引號不能省略,以上的value3表示任意數(shù)據(jù)
2.Array數(shù)組
我們把外面是[],里面是任意一種數(shù)據(jù)的,叫做Array,比如
[0,
"三國殺",
true,
{
skill:"yiji"
},
[],
function(){}]
數(shù)據(jù)分項(xiàng)數(shù),第一項(xiàng)就為0,第二項(xiàng)就為"三國殺",以此類推,等等
同樣的,要調(diào)出其中任意一項(xiàng)就是:數(shù)組名[項(xiàng)數(shù)-1]
比如,我們將數(shù)組命名為Array1,要調(diào)出其中的第一項(xiàng):
Array1[0]
數(shù)組也有一個屬性,length,即它的總項(xiàng)數(shù)
還是這個Array,Array1.length就等于6
3.Function函數(shù)
function是一個放代碼的地方,有需要時就會用到它。
可以這樣創(chuàng)建一個函數(shù)
function(){}
大括號內(nèi)就是填的你要放的代碼。
我們要調(diào)用一個函數(shù),就這樣寫:函數(shù)名()
比如我將以上函數(shù)命名為myFunction,
我要用時,就寫:
myFunction()
小括號中,可以根據(jù)函數(shù)本身填上各種數(shù)據(jù)。比如:
myFunction(11,true,"你好")
這些填上的數(shù)據(jù)會交給其相應(yīng)函數(shù)處理。
這些填上的數(shù)據(jù)的集合在處理時叫做arguments,其中第一項(xiàng)11為arguments[0],第二項(xiàng)true為arguments[1],"你好"為arguments[2],以此類推。
比如名為myFunction的存的代碼是,小括號內(nèi)填的內(nèi)容不變:
game.print(arguments[0])
調(diào)用myFunction,在游戲的控制臺那里可以看見,有一個數(shù)字就為11。
以上為對象類數(shù)據(jù)類型,除此之外,還有RegExp和Date等等,也不做介紹

skill數(shù)據(jù)
已經(jīng)知道數(shù)據(jù)類型了,我們可以對skill的數(shù)據(jù)類型進(jìn)行分析
任何技能都是一個object,而其key都是string,這都沒什么好說的,重要的是value值。
trigger
trigger的value是一個object,其下的key為player,source,global等等,player,source,global等等的value值為array,array內(nèi)每一項(xiàng)都為string
即:
trigger:{
player:["",""],
global:["",""],
source:["",""]
}
標(biāo)簽類
特殊技能標(biāo)簽的value都是布爾,
即:
forced:true,
limited:true,
juexingji:true,
zhuanhuanji:true,
zhuSkill:true,
dutySkill:true,
charlotte:true,
動畫標(biāo)簽中,skillAnimation的value值是一個boolean布爾,animationColor的value值是一個string字符串
即
skillAnimation:true,
animationColor:"",
在標(biāo)記標(biāo)簽中mark的value值是一個布爾boolean,marktext的value值是一個string字符串,intro的value值是一個object對象,其下的name的value值為string字符串,其下的content的value值為string字符串(或者function函數(shù))
即
mark:true,
marktext:"",
intro:{
name:"",
content:"limited"
},
衍生技標(biāo)簽derivation,其value值是array數(shù)組,這個array的項(xiàng)皆為string字符串;技能組標(biāo)簽group,其value值是array數(shù)組,這個array的項(xiàng)皆為string字符串
即
derivation:["",""],
group:["",""],
繼承標(biāo)簽inherit,其value值是string字符串
即
inherit:"",
子技能標(biāo)簽subSkill的value值是一個object,其下可以有任意個key,這些key對應(yīng)的value值也都是object。
函數(shù)類
filter,init,content這些的value值都為function。我們已經(jīng)講過filter的arguments和init的arguments,這里不再多述。我們要說一下content。
content的function是無名殺獨(dú)特寫法,其有著一些獨(dú)特的語法,這也是我們要了解的重點(diǎn)。
在content那里,我們不需要arguments,因?yàn)樗腶rguments中的項(xiàng)太多,發(fā)動技能的時候,就幫我們處理好了;在filter和init那里我們需要arguments,或者至少為arguments的項(xiàng)起名字。
player屬性數(shù)據(jù)
我們講一下player的屬性,這里指的player就是某一場上角色
player是一個對象,叫元素對象(element)。
player.name1即角色的id,它是一個string字符串
player.identity即身份,它是一個string字符串
player.hp即體力值,顯然的,它是一個number數(shù)字
player.maxHp即體力上限,同樣的,它是一個number數(shù)字
player.hujia即護(hù)甲值,也是一個number數(shù)字
player.skills即技能,它是一個array,array的每一項(xiàng)都是技能的id,技能的id當(dāng)然是string字符串
player.storage即儲存空間,它是一個object。
計算
1.數(shù)字運(yùn)算(結(jié)果為number)
四則運(yùn)算算法不用多提,我們來說一下其運(yùn)算符號:
加號:+
減號:-
乘號:*
除號:/
此外還有一個取余符號,它專門算余數(shù)。比如1/2的余數(shù)是1,進(jìn)行運(yùn)算后,表達(dá)式的值就為1
那么如何用表達(dá)式寫呢?
寫成這樣
1%2
這就是取1/2的余數(shù)
此外,對于+1和-1,我們也有簡便的寫法,比如我們想讓1加1,自然可以寫
1+1
還可以寫成
1++
對應(yīng)的也有
1--
2.關(guān)系運(yùn)算(結(jié)果為boolean)
>,<,==,===
>大于符號,它的運(yùn)算結(jié)果是一個boolean布爾
比如
3>5
為假,它結(jié)果就是false
再如
4>3
為真,它的結(jié)果就是true
<小于同理
==等于
兩邊相等就為true,否則為false,比如
3==3
為true
此外,number數(shù)字和string字符串也可以相等,前提是string字符串里也為數(shù)字,比如
1=='1'
為真
特別的:
''==0
為真
number數(shù)字也可以和boolean布爾相等,比如
1==true
0==false
為真
string字符串也可以和boolean相等,比如
'1'==true
'0'==false
''==false
為真
特殊的:
undefined==null
為真
===嚴(yán)格等于
===嚴(yán)格等于,等式兩邊不僅值要一樣,而且數(shù)據(jù)類型一樣才為真。
1==='1'
為假
===嚴(yán)格等于比==等于更快,因?yàn)?=還要進(jìn)行數(shù)據(jù)轉(zhuǎn)換。
3.邏輯運(yùn)算(結(jié)果為boolean)
||,&&,!
||或,兩邊有一真為真,兩邊皆假為假。
&&且,兩邊有一假為假,兩邊皆真為真。
!非,可以使一個布爾值變?yōu)橄喾吹?/p>
!!雙重否定,可以將一個數(shù)據(jù)變?yōu)閷?yīng)的布爾值。