Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
嘍,大家好,這里是雷工筆記!
我們只管努力,剩下交給天意,或許哪天用的到,總比多刷半小時(shí)視頻要有意義吧。
1、概念:使用const聲明的變量稱為“常量”。
2、應(yīng)用場(chǎng)景:當(dāng)某個(gè)變量永遠(yuǎn)不會(huì)改變時(shí),就能夠使用const 來(lái)聲明,而不是let。
3、命名規(guī)范:與變量一樣。
示例:
//聲明一個(gè)常量
const P=3.14
//輸出這個(gè)常量
console.log(P)
注意事項(xiàng):常量不允許重新賦值,聲明的時(shí)候必須初始化。
提醒:不需要重新賦值的數(shù)據(jù)使用const。
1、在程序中如果值不會(huì)發(fā)生變化或不能改變,推薦使用const。
2、在程序中如果值不斷地發(fā)生改變,那么推薦使用let(var)。
3、const定義的常量必須設(shè)置默認(rèn)值。
4、const定義的常量名不能重復(fù)。
5、const定義的常量必須先定義后使用。
三、后記
以上為JavaScript常量的基礎(chǔ)知識(shí),比較簡(jiǎn)單,一看就懂,想忘都難。
JavaScript描述了一組具有特定用途的關(guān)鍵字,一般用于控制語(yǔ)句的開(kāi)始或結(jié)束,或者用于執(zhí)行特定的操作等。
JavaScriptScript全部關(guān)鍵字
?
break | else | new | var |
case | finally | return | void |
catch | for | switch | while |
continue | function | this | with |
default | if | throw | |
delete | in | try | |
do | instanceof | typeof |
JavaScript還描述了另一組不能用作標(biāo)識(shí)符的保留字。盡管保留字在JavaScript中還沒(méi)有特定的用途,但它們很有可能在將來(lái)被用作關(guān)鍵字。
?JavaScriptScript全部保留字
?
abstract | enum | int | short |
boolean | export | interface | static |
byte | extends | long | super |
char | final | native | synchronized |
class | float | package | throws |
const | goto | private | transient |
debugger | implements | protected | volatile |
double | import | public |
?JavaScriptScript瀏覽器定義的保留字
?
alert | eval | location | open |
array | focus | math | outerHeight |
blur | funtion | name | parent |
boolean | history | navigator | parseFloat |
date | image | number | regExp |
document | isNaN | object | status |
escape | length | onLoad | string |
1.變量的名字就和我們的名字一樣,程序也需要通過(guò)名字來(lái)找到對(duì)應(yīng)的數(shù)據(jù)。
例如:曹老師,我想要JavaScript的視頻。曹老師就是變量的名字,JavaScript的視頻就是變量的值。
2.在JavaScript中,給一個(gè)變量命名,我們需要遵循以下的原則:
1.定義變量時(shí)要使用var操作符(var是關(guān)鍵),后面跟一個(gè)變量名(變量名是標(biāo)識(shí)符)。
例:var a=100;
如下圖所示:
全套前端課程及資料請(qǐng)伽薇xiaole45666
2.一個(gè)var也可以同時(shí)聲明多個(gè)變量名,其中變量名之間必須用英文逗號(hào)(,)隔開(kāi),例如:
var a=10,b=20,c=30;
在JavaScript中,常量指的是一個(gè)不能改變的量。也就是說(shuō),常量的值從定義開(kāi)始就是固定的,一直到程序結(jié)束都不會(huì)改變。
在JavaScript中,我們可以把常量看成是一種特殊的變量,之所以特殊,是因?yàn)樗闹凳遣粫?huì)變的。一般情況下,常量名全部大寫,別人一看就知道這個(gè)值很特殊,有特殊用途,如:var DEBUG=1
目前我們只需要簡(jiǎn)單了解常量的知識(shí),在之后的課程中我們會(huì)詳細(xì)講解。如需全套完整前端開(kāi)發(fā)教程及配套資料請(qǐng)伽薇xiaole45666
應(yīng)該是JavaScript系列教程第三期,這期準(zhǔn)備講一下數(shù)據(jù)類型,常量以及變量的定義。
任何的編程語(yǔ)言都有自己的數(shù)據(jù)類型與數(shù)據(jù)結(jié)構(gòu),那么JavaScipt也有自己的數(shù)據(jù)類型,可以將其分為基本數(shù)據(jù)類型與引用數(shù)據(jù)類型!基本數(shù)據(jù)類型指的是簡(jiǎn)單的數(shù)據(jù)段,引用數(shù)據(jù)類型指的是有多個(gè)值構(gòu)成的對(duì)象。當(dāng)我們把變量賦值給一個(gè)變量時(shí),解析器首先要確認(rèn)的就是這個(gè)值是基本類型值還是引用類型值。
在JavaScipt 中,基本類型(基本數(shù)值、基本數(shù)據(jù)類型)是一種既非對(duì)象也無(wú)方法或?qū)傩缘臄?shù)據(jù)。有 7 種原始數(shù)據(jù)類型:
基本數(shù)據(jù)類型是保存在棧中的,存取的速度比較快。
引用數(shù)據(jù)類型我們通常統(tǒng)稱為Object類型,大致上分為一下5種:
引用數(shù)據(jù)類型是保存在堆當(dāng)中的,這樣說(shuō)可能不準(zhǔn)確,準(zhǔn)確的說(shuō)法應(yīng)該是引用數(shù)據(jù)類型的對(duì)象保存在了堆當(dāng)中。
將堆和棧進(jìn)行一下對(duì)比:
我們定義一個(gè)基本數(shù)據(jù)類型在棧中,應(yīng)該是以下的情況。
上面的栗子就是定義了
const a = 1const b = 2const c = 3const d = 4
以上看起來(lái)是挺簡(jiǎn)單的一對(duì)一的形式儲(chǔ)存的。
我們同樣來(lái)定義一下引用數(shù)據(jù)類型:
const e = new Object()const f = ee.name = 'orange'
以上代碼的存儲(chǔ)形式應(yīng)該如下:
解釋一下上面圖片,左邊是一個(gè)棧,定義了一個(gè)引用數(shù)據(jù)類型,名稱叫做e,然后e在堆中開(kāi)辟了一個(gè)空間,有了一個(gè)地址,所以棧中的值就是這個(gè)空間的地址,然后又定義了一個(gè)引用數(shù)據(jù)類型,叫做f,把e賦值給f,這個(gè)時(shí)候值也是指向了這個(gè)空間的地址。最后給這個(gè)空間加了一個(gè)值,name:'orange'。最后就是e和f其實(shí)是一個(gè)東西了。
如果你沒(méi)有聽(tīng)清楚,沒(méi)搞明白,我來(lái)給你簡(jiǎn)單翻譯一下!
假如你有一個(gè)空地,這個(gè)空地就是棧,然后這個(gè)空地上面來(lái)了a,b,c,d,e,f這幾個(gè)人(也就是名稱),然后呢a.b,c,d這四個(gè)人都是本地人,就在這個(gè)空地上修了個(gè)房間(也就是值),分別放了1,2,3,4。但是呢,e,f他不是本地人,人家有自己房子,跑到你的地方來(lái)了,他也修了東西,但是只是一個(gè)門,這個(gè)地址(也就是值)是他家(也就是堆),剛好f和e是一家人,所以就用了e的門,也通向了這個(gè)家(堆)。
不知道以上的解釋清楚了沒(méi),在不清楚的話,私信我,我去做個(gè)動(dòng)畫給你描述清楚!!!!
在代碼中,我們是怎么判斷數(shù)據(jù)類型的,數(shù)據(jù)類型怎么轉(zhuǎn)化呢?
我們有很多方法可以用來(lái)判斷。
typeof 基本只能判斷出基本數(shù)據(jù)類型,引用類型除了function外,都是 object 。
const typeOf = () => { // 基本類型 console.log(typeof(1)); //number console.log(typeof('1')); //string console.log(typeof(null)); //object console.log(typeof(false)); //boolean console.log(typeof(undefined)); //undefined console.log(typeof(Symbol())); //symbol console.log(typeof(NaN)); //number // 引用類型 console.log(typeof {}); //object console.log(typeof []); //object console.log(typeof Error('1')); //object function A() {} console.log(typeof A); //function}typeOf()
instanceof 返回是true或false,只能對(duì)引用數(shù)據(jù)類型進(jìn)行判斷。
const instanceOf = () => { // 基本類型 console.log(1 instanceof Number); //false console.log("1" instanceof String); //false console.log(true instanceof Boolean); //false console.log(null instanceof Object); //false console.log(undefined instanceof Object); //false console.log(Symbol() instanceof Symbol); //false // 引用類型 console.log({} instanceof Object); //true console.log([] instanceof Array); //true console.log(Error('1') instanceof Error); //true function A() {} console.log(A instanceof Function); //true}instanceOf()
Object.prototype.toString.call() 返回是一個(gè)[object xxx]的字符串,可以通過(guò)slice(8, -1)的方式來(lái)獲取完整的數(shù)據(jù)類型。
const stringCall = () => { // 基本類型 console.log(Object.prototype.toString.call(1)); //[object Number] console.log(Object.prototype.toString.call(1).slice(8, -1)) //Number console.log(Object.prototype.toString.call('1').slice(8, -1)) //String console.log(Object.prototype.toString.call(true).slice(8, -1)) //Boolean console.log(Object.prototype.toString.call(null).slice(8, -1)) //Null console.log(Object.prototype.toString.call(undefined).slice(8, -1)) //Undefined console.log(Object.prototype.toString.call(NaN).slice(8, -1)) //Number console.log(Object.prototype.toString.call(Symbol()).slice(8, -1)) //Symbol // 引用數(shù)據(jù)類型 console.log(Object.prototype.toString.call({}).slice(8, -1)) //Object console.log(Object.prototype.toString.call([]).slice(8, -1)) //Array console.log(Object.prototype.toString.call(Error('1')).slice(8, -1)) //Error function A() {} console.log(Object.prototype.toString.call(A).slice(8, -1)) //Function}stringCall()
即可以判斷基本數(shù)據(jù)類型,也可以判斷引用數(shù)據(jù)類型,由于null和undefined沒(méi)有constructor,所以判斷不了,同時(shí)由于constructor可以改變,所以此方法如果改寫了constructor,就不準(zhǔn)確了。
const constructorName = () => { // 基本數(shù)據(jù)類型 console.log((1).constructor.name); //Number console.log('1'.constructor.name); //String // console.log((null).constructor.name); //報(bào)錯(cuò) Cannot read properties of null (reading 'constructor') // console.log((undefined).constructor.name); //報(bào)錯(cuò) Cannot read properties of undefined (reading 'constructor') console.log((true).constructor.name); //Boolean console.log((NaN).constructor.name); //Number console.log((Symbol()).constructor.name); //Symbol // 引用數(shù)據(jù)類型 console.log(({}).constructor.name); //Object console.log(([]).constructor.name); //Array console.log((Error('1')).constructor.name); //Error function A() {} console.log((A).constructor.name); //Function}constructorName()
可以判斷基本數(shù)據(jù)類型,也可以判斷引用數(shù)據(jù)類型,由于null和undefined沒(méi)有constructor,所以判斷不了。因?yàn)閏onstructor.toString().indexOf()也是用到了constructor,所以如果該寫了constructor后,就不準(zhǔn)確了。
const toStringIndexOf = () => { // 基本數(shù)據(jù)類型 console.log((1).constructor.toString()); //function Number() { [native code] } console.log((1).constructor.toString().indexOf('Number') > -1) //true console.log(('1').constructor.toString().indexOf('String') > -1) //true // console.log((null).constructor.toString().indexOf('Null') > -1) //報(bào)錯(cuò),Cannot read properties of null (reading 'constructor') // console.log((undefined).constructor.toString().indexOf('Undefined') > -1) //報(bào)錯(cuò), Cannot read properties of undefined (reading 'constructor') console.log((Symbol()).constructor.toString().indexOf('Symbol') > -1) //true console.log((true).constructor.toString().indexOf('Boolean') > -1) //true console.log((NaN).constructor.toString().indexOf('Number') > -1) //true // 引用數(shù)據(jù)類型 console.log(({}).constructor.toString().indexOf('Object') > -1) //true console.log(([]).constructor.toString().indexOf('Array') > -1) //true console.log((Error('1')).constructor.toString().indexOf('Error') > -1) //true function A() {} console.log((A).constructor.toString().indexOf('Function') > -1) //true}toStringIndexOf()
改寫constructor
const num = new Number(1)console.log((num).constructor.name); //Numberconsole.log((num).constructor.toString().indexOf('Number') > -1) //truefunction A() {}num.constructor = Aconsole.log((A).constructor.name); //Functionconsole.log((A).constructor.toString().indexOf('Function') > -1) //true
這里說(shuō)的類型轉(zhuǎn)換是字符串和數(shù)值之間的轉(zhuǎn)換。
toString(),18.toString()
String(),String(18)
拼接,18+''
以上三種辦法都可以將數(shù)值類型轉(zhuǎn)化為字符串類型。
Number(),Number('18')
parseInt(),parseInt('18')
parseFloat(),parseFloat('18')
+或-,-'18'或者+'18'
以上四種方法都可以將字符串轉(zhuǎn)化為字符串。
我們?cè)诙x的時(shí)候,分為常量與變量,一般可以使用var,const,let來(lái)定義。
es5的時(shí)候我們都是用var來(lái)定義常量與變量。但是很容易造成變量提升或者變量的全局污染。所以我們現(xiàn)在很少使用這個(gè)了。
es6的方法,使用const來(lái)定義常量與變量。比如定義基礎(chǔ)數(shù)據(jù)類型的常量,const a=1,這個(gè)就是定義一個(gè)a 的常量,不可以更改。這里的不可以更改指的是基礎(chǔ)數(shù)據(jù)類型不能更改,引用數(shù)據(jù)類型不能更改其類型,但是可以更改其值。
const a = 1const b = { name:'orange', age:18}// 修改aa = 2 //這個(gè)肯定要報(bào)錯(cuò)的b.age = 20 //這個(gè)可以更改
這也是es6的語(yǔ)法,使用let定義變量,不管是基礎(chǔ)數(shù)據(jù)類型還是引用數(shù)據(jù)類型都可以,同時(shí)可以更改。
let a = 1let b = { name:'orange', age:18}// 修改aa = 2b.age = 20b = 3
*請(qǐng)認(rèn)真填寫需求信息,我們會(huì)在24小時(shí)內(nèi)與您取得聯(lián)系。