數(shù)據(jù)類型
1 數(shù)據(jù)類型劃分
四種: 字符串 數(shù)字 布爾 未定義 空
String Number Boolean undefined null
復雜數(shù)據(jù)類型(引用類型)
Object、function、Array、Date、RegExp、Error.......
字面量
固定的值,讓你從“字面上”理解其含義。
數(shù)值字面量
var age = 18; // 數(shù)值字面量,18為字面值
簡單數(shù)據(jù)類型介紹
Number
1.進制
進制包括2進制、8進制(011)、10進制、16進制(0xA)、32進制等....
2.浮點數(shù)
因為精度丟失問題,所以不判斷計算后的兩個浮點數(shù)是否相等。
3.數(shù)值范圍
由于內(nèi)存的限制,ECMAScript 并不能保存世界上所有的數(shù)值
最小值:Number.MIN_VALUE,這個值為: 5e-324
最大值:Number.MAX_VALUE,這個值為: 1.7976931348623157e+308
無窮大:Infinity
無窮?。?Infinity
4.NaN
a) NaN 非數(shù)值(Not a Number的簡寫)
console.log(“abc”/18); //結(jié)果是NaN
Undefined和任何數(shù)值計算為NaN;
NaN 與任何值都不相等,包括 NaN 本身
b) isNaN() :任何不能被轉(zhuǎn)換為數(shù)值的值都會導致這個函數(shù)返回 true
(isNaN譯為是否符合一個標準,什么標準呢?不是一個數(shù)字的標 準,如果符合了那么就不是一個數(shù)字,不符合就是一個數(shù)字)
isNaN(NaN);// true
isNaN(“blue”); // true
isNaN(123); // false
String
1.字面量定義方式
用引號時,可單可雙,唯獨不可一單一雙??捎?length看有幾個字符。
var name = "zhangsan";
var name = 'zhangsan';
var name = 'zhangsan"; //錯誤,單引號和雙引號要成對出現(xiàn)
2.轉(zhuǎn)譯
總結(jié):無法輸出的字符,先輸出/,在輸出字符。(“、\、換行等....)
3.字符串不可變
在內(nèi)存中不會立刻消失,只能二次賦值,原有的字符在一定時間 內(nèi)被 垃圾回收器回收。
4.字符串拼接
如果兩個變量都是字符串,無論是否包含數(shù)字,只要是拼接,那么在前一個后面添加后一個字符串。(+與-情況不同,詳情參考數(shù)據(jù)轉(zhuǎn)換)
Booblean
1.Boolean類型有兩個字面量:true和false,區(qū)分大小寫。(大寫不對)
雖然Boolean 類型的字面值只有兩個,但 ECMAScript 中所有類型的值都有與這兩個 Boolean 值等價的值
2.true
true、除0數(shù)字、“something”、Object(任何對象)為true
3.false
false、0 、“”、undefined 、null為false
4.if判斷時會把()內(nèi)的值強行轉(zhuǎn)換成boolean類型。
undefined和null
null和undefined有最大的相似性??纯磏ull == undefined的結(jié)果(true)也就更加能說明這點。但是null ===undefined的結(jié)果(false)。不過相似歸相似,還是有區(qū)別的,就是和數(shù)字運算時,10 + null結(jié)果為:10;10 + undefined結(jié)果為:NaN。
任何數(shù)據(jù)類型和undefined運算都是NaN;
任何值和null運算,null可看做0運算。
數(shù)據(jù)類型轉(zhuǎn)換
任何簡單類型轉(zhuǎn)換成String(三種方法)
1變量+“” 或者 變量+“abc”
2 String(變量)
3 變量.toSting() 注意:undefined和null不可以
Null和undefined無toString方法。
任何簡單類型轉(zhuǎn)換成Number
此轉(zhuǎn)換容易產(chǎn)生NaN,一旦被轉(zhuǎn)換的變量中含有非數(shù)字字符,都容易出現(xiàn)NaN
1. 變量-*/一個數(shù)字(有非數(shù)字字符會出現(xiàn)NaN)
例:var num1 = “11”- 0; var num2 =“11”* 1;var num =“11”/1;
JS底層做了一個強制類型轉(zhuǎn)換,把字符串轉(zhuǎn)換成了Number進行運算。
2. Number(變量)(有非數(shù)字字符會出現(xiàn)NaN)
var num1 = Number(“18”); 把字符變成了數(shù)字。
var num2 = Number(“18.99”); 結(jié)果為18.99數(shù)字型。(有小數(shù)也轉(zhuǎn)換)
3. parseInt()和parseFloat()(譯為取整和取浮點數(shù))
空字符串parseInt()和parseFloat()返回NaN,Number("")返回0
parseInt(變量):如果變量中收割字符為字母則結(jié)果為NaN。
否則取出現(xiàn)首個非數(shù)字前的整數(shù)。
123 = parseInt(“123.123aaaa”);
parseFloat(變量):如果變量中收割字符為字母則結(jié)果為NaN。
否則取出現(xiàn)首個非數(shù)字前的浮點數(shù)。(沒有小數(shù)取整)
123.123 = parseFloat(“123.123aaaa”);
4. 提別提示
Boolean類型中:true數(shù)值為1;false為0;
null的數(shù)值類型為0;
undefined無數(shù)值類型或者為NaN;
任何簡單類型轉(zhuǎn)換成Boolean
任何數(shù)據(jù)類型都可以轉(zhuǎn)換成boolean類型,所以和遺忘兩個轉(zhuǎn)換不同;
1. Boolean(變量)
var bool = Boolean(“1111”); bool為true;
2. ??!變量
第一個邏輯非操作會基于無論什么操作數(shù)返回一個與之相反的布爾值
第二個邏輯非操作則對該布爾值求反
于是就得到了這個值真正對應的布爾值
操作符
1 操作符種類
一、算數(shù)運算符(+—*/...)
a) 一元運算符:正號、負號、++、--、平方等一個變量就能運算
b) 二元運算符:+-*/%等兩個變量才能運算
c) 三元運算符: 值1?值2:值3;
二、邏輯運算符( ||&& ! )(或且非)
三、比較運算符(<、>、==、>=...)
四、賦值運算符(=、+=、-=、*=、/=、%=)
優(yōu)先級
1 ()
2 !、-(負數(shù))、++、-- (正數(shù)省略+)(一元運算)
3 *、/、%
4 +、- (加,減)(二元運算)
5 <、<=、<、>= (一級邏輯運算)
6 ==、!=、===、!==、 (二級邏輯運算)
7 && (三級級邏輯運算)
8 ||
9?: (三元運算)
10 =、+=、-=、*=、/=、%= (賦值運算)

&&和||運算
1 &&鏈接兩個boolean類型,有一個是false結(jié)果就是false。
鏈接值不是布爾類型時,按照成布爾類型計算,結(jié)果本身不變。(非布爾)
例子: 1 = 2&&1; 0 = 0 && 1; 都是true取后面,都是false取前面。
2 ||鏈接兩個boolean類型,有一個是true結(jié)果就是true。
鏈接值不是布爾類型時,按照成布爾類型計算,結(jié)果本身不變。(非布爾)
例子: 2= 2||1; 1 = 0 || 1; 都是true取前面,都是false取后面。
var obj = document.body.scrollTop || document.documentElement.scrollTop;
代碼部分
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<script type="text/javascript">
// 數(shù)值型: number
// var a=10;
// var b= 20;
// console.log( a +b);
//
// 字符串:string
// var a ="123"
// var b ="12"
// console.log(a+b);
// console.log(typeof a)
//
// 布爾:boolean
// var a= true;
// var b=false;
// console.log(typeof a)
// console.log(typeof b)
//
// undefined: 未定義
// var a
// console.log (typeof a);
//
// null: 空
var a=null;
console.log (typeof a)(object)
</script>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<script type="text/javascript">
// 轉(zhuǎn)為字符串
// var a=1;
// var b=1+""
// var c=String(a)
// var d=a.toString();
// console.log(typeof a);
// console.log(typeof b);
// console.log(typeof c);
// console.log(typeof d);
// 轉(zhuǎn)為Number型
// var a="";
// var b= 1122-"";
// var c=1*"";
// var d= 1/"";
// var e=Number(a)
// console.log(typeof a);
// console.log(typeof b);
// console.log(typeof c);
// console.log(typeof d);
// console.log(typeof e);
var num=11.11;
var n= parseInt(num);
var m= parseFloat(num);
console.log(typeof n);
console.log(typeof m);
</script>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<script type="text/javascript">
var a=Number(prompt("aaaaa"));
var b=Number(prompt("bbbbbb"));
a>b ?alert("a>b是正確的"): alert("a>b是錯誤的");
</script>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<script type="text/javascript">
var a=prompt("我是彈出輸入輸入框")
console.log(a);
console.log(parseInt(a%2));
console.log(parseInt((a%100)/10));
console.log(parseInt(a%10));
console.log(parseInt(a%2) + parseInt((a%100)/10) + parseInt(a%10));
</script>
</body>
</html>