關于js變數
- 變數,就是一個用來存盤資料的容器
- 一般來說,我們的變數都是可以得先宣告,再使用,就像是一個東西先必須存在,才能看得見摸得著,然而在js里(es5),可以先使用,后宣告,
a = 100;
var b =200;
console.log(a,b)
var a;
輸出結果為:100,200
ps:這樣的語法在es5里是能夠執行的,雖然它不符合我們的邏輯思維,在js里叫做,變數提升,
- 如果在宣告變數時,沒有賦值,直接列印不會報錯,因為它有一個默認的值,undefined,表示未定義的值,
- 變數的型別:js是一種弱語言,變數宣告時,它的資料型別不明確,只有在賦值的那一刻,變數的資料型別才確定,
- 變數的重復定義:
var a = 3
var a = a-1;
console.log(a)
//輸出結果為2
像這樣的語法在Java,c等中,絕對報錯,但是在es5中,叫做重復定義,這個邏輯也不符合正常,就好比出生,都是出生一次,沒有說有出生兩次三次的說法,因此這上面的幾個不太符合邏輯的特點,我們知道就行,盡量避開就行,
JavaScript中的7種資料型別
口訣: 3 2 2
三種基本資料型別
- number 數字型別,不區分小數,整數,浮點數,只要是個數,都歸類為number型別,
(ps:NaN表示非數字型別,就是除了數字意外的,叫做非數字,他是number的一個屬性) - string 字符型別,這個不用多解釋,var str = '';'和"都可以
ps:建議不要使用new String('xxxx'),因為這個影響執行速度 - Boolean 布爾型別 , 只有兩個值,true/false,非真即假
兩個參考資料型別
- Object 物件型別,
//1. 直接用{}創建物件
var obj = {name:'rainbow',age=20,run : function(){
console.log('i love runnning');
}};
//2. 用new關鍵字實體化一個物件
var obj2 = new Object();
obj2.name = 'rainbow';
obj2.age = 20;
obj.say = function(){
console.log('hello world')
}
- Array 陣列型別
//1. 直接用[]創建
var arr = [];//空陣列
//2. new
var arr2= new Array();
ps:注意的是,js可以不用給陣列一個初始長度,并且這個長度可讀可寫,但是不建議寫,因為可能導致資料丟失
兩種特殊資料型別
- undefined
未定義的資料型別 - null
值為null
typeof關鍵字
typeof就是用來檢測一個變數的資料型別
使用方法:typeof 變數名(或者常量名)
賦值運算子
自增自減:a++,++a,a--,--a;
ps:++a 和 a++的區別:
如果單單是一條陳述句而言,兩者并沒有什么區別,就僅僅是一條陳述句而已,執行后,自己都加了1,但是在有賦值和其他復雜的運算時,就有區別了;
e.g.
var a = 8;
++a;
var b = a++;
var c = --b;
console.log(a,b,c);
//輸出結果為a,b,c為10,8,8
b = ++a; 先自增,后賦值
b = a++; 先賦值,后自增
比較運算子
- ASCII的比較
d > f false
a > 2 false
查閱ASCII表,記住幾個常用的ASCII碼值就行了, - == !=
比較的兩邊的值是否相等或者不相等,不同的資料型別也可以比較 - === !==
=== 首先比較兩邊的資料型別是否相等,不相等后面就不再比較了,如果同型別,那么就比較值是否相等,(推薦使用)
!== 就是不全等,===的取反
邏輯運算子
與或非
or and not
邏輯運算 || && !
位運算 | &
三目運算子 A<B?運算式1:運算式2; //true放回運算式1,否則為運算式2
//表示真偽的運算
真 假
布林值 true false
數字 非0 0
字串 非空 null
短路與和短路或
口訣:
短路與 有0出0,全1為1
短路或 有1出1,全0為0
ps:注意,短路與和短路或在運算時,結果并不是回傳true或者false布林值,而是回傳左邊或右邊具體的值,比如
//短路與
console.log(1 && 1);//1
console.log(19 && 20);//20
console.log(0 && 20);//0
//短路或
console.log( true || 1)//true
console.log( '' || 1 )//1
console.log( ' ' || 1 )//' ' 空格不是空
字串拼接
自動轉換
1. number -> string
console.log(1+2+'3')//輸出:33 字串型別
console.log('1'+4+6+9) //1469
console.log(10+8+'1'+4+6) //18146
2. string -> number
console.log(1+2+'3'-4);//輸出29,number型別
console.log(true + 1);//3 number
console.log(true - 1);//0 number
ps:如果字串出現在最左邊,那么后面的數字都會拼接,
如果字串出現在最右邊,那么前面的數字都會相加,再拼接,
強制轉換
首先我們需要理解一個知識,什么是包裝類?
它其實就是把幾種基本的資料型別(除了undefined和null),封裝成一個類,并給這個類添加屬性和方法,
實體化
我們列印一下這個未實體化的Number,輸出的是?
console.log(Number);
//結果:? Number() { [native code] },是一個function
//實體化后
console.log(new Number(2));
//結果:Number {2}
__proto__: Number[[PrimitiveValue]]: 2
字串轉數字
var a = 1;
var b = '2';
轉換:
b = Number(b);//這個時候就相當于呼叫了Number方法,回傳一個number型別資料
//a + b 等于 3,number型別
ps:如果b是含有數字之外的字符,那么無法正常轉換,結果為NaN,
parseInt()
去掉小數點后面的數,轉為整數,
如果是字串,也可以轉,但是得看情況:
1.parseInt('12px'); // 結果為12
2.parseInt('px12'); // 結果為NaN
parseFloat()
沒啥用,和parseInt區別不大,雖然方法名以為是轉為浮點數,但是實際效果不會帶有小數點,
toString()
一般用于字串的拼接,obj.toString(1+2+'3d')//33d
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/247123.html
標籤:其他
