温故知新JavaScript(第二天js数据类型)

232 阅读7分钟

1.js数据类型

六大类,5个基本数据类型,1个复杂类型(对象类型,引用类型)

5个基本数据类型:Number,String,Boolean,null,undefined

复杂类型Object(object,function,array)

基本数据类型

1.1 number

整数,小数,八进制,十六进制,NaN(not a number)都属于number类型

//1.Number
var n1 = 10;
var n2 = 5.5;

//typeof:检测变量数据类型
console.log(typeof (n1)); //number
console.log(typeof n2);// number

var n3 = 057; //0开头,并且没有超过8的数,8进制
console.log(n3); //47

var n4 = 0x11; //0x开头,十六进制 0-9 a b c d e f
console.log(n4);//17

var n5 = NaN; //not a number 不是一个数字
console.log(10*"a");//NaN  运算发生错误的时候会得到一个NaN
console.log(NaN==NaN); //false

//有些小数在运算的过程中,可以会出现偏差,小数不要做为判断条件
console.log(0.1+0.2); //0.30000000000000004
console.log(0.1+0.2 == 0.3); //false
1.2 string

String:字符串 引号引起来的都是字符串 "" ''

var s1 = "str";
var s2 = '1234';
console.log(typeof s1,typeof s2); //string string

var passWord = "13145672345";

//2.1 length:获取字符串中字符的长度
var l = passWord.length;
console.log(l);

//2.2 charAt():获取对应位置的字符串  下标从0开始
console.log(passWord.charAt(0));
1.3 Boolean
//3.Boolean:true  false  1.作为判断条件  2,作为判断结果
var b1 = true;
var b2 = false;
console.log(10>20);
1.4.null undefined
//一般情况下,如果出现了null和undefined说明代码出现了问题
var a;
console.log(a); // undefined 声明了变量,但是没有赋值,变量没有初始化,表示值的空缺
var b = null; //值为空
console.log(document.getElementById("text")); //null

1.null和undefined的区别?

undefined:访问一个没有被初始化的变量返回的值,空变量 null:访问一个不存在的对象返回的值,空对象

复杂类型

1.5复杂类型object,array,function

var oDiv = document.getElementById("box");
console.log(typeof oDiv); //object
console.log(typeof document); //object
console.log(typeof window); //object

//1.object   json形式的对象
var obj = {
    "sex":"女",
    "age":18,
    "height":"165"
}
console.log(obj);
console.log(obj.height);

//2.array 数组:存储数据,存储任意类型数据
var arr = [1,2,true,null,"f"];
//length:计算数组的个数
console.log(arr.length);
console.log(arr[1]); //通过下标获取元素,  从0开始


//3.function:函数   用来保存代码块,在需要的时候调用
//3.1  声明函数   function 函数名(){ 保存的代码 }
//3.2  调用函数   函数名()
function suibian(){
    console.log("随便,都可以");
}

suibian();
suibian();
1.6 数据类型的划分标准

[外链图片转存中...(img-iSa99038-1572164658475)]

引用类型存储在堆中,引用类型的变量名中存储的是内存地址

var arr = [1,2,3]; var arr1 = arr; //赋值的arr的内存地址 arr1.push(4); //在数组末尾添加一个值 console.log(arr1); //[1, 2, 3, 4] console.log(arr); //[1, 2, 3, 4]

上面代码中,arr1=arr;是arr将他的内存地址复制给arr1,

Arr1.push(4),arr1通过内存地址,找到数组存放的那块区域,将4添加在数组的末尾

console.log(arr); //[1, 2, 3, 4],因为现在共用的同一块地址,arr的值也时1234

2.数据类型的强制转换

2.1转number

var n = 11;
var s = "10";
var b = true;
var nu = null;
var u; //undefined
//1.Number(要转换的值),之前的变量不会改变类型,
console.log(Number(n)); //11
var ss = Number(s); //转换为number类型的10
console.log(ss); //10
console.log(s); //"10"
console.log(Number(b)); //true---1  false----0
console.log(Number(nu)); //0
console.log(Number(u)); //NaN

console.log(Number("")); //0
console.log(Number("12px")); //NaN

注意:Number可以转换,boolean,null,字符串("" 纯数字字符),其他的都是NaN

2.parseInt :强制转换为Number,取整(舍弃掉小数部分)
3.parseFloat:强制转换为Number,保留小数部分
console.log(parseInt("12px")); //12
console.log(parseInt("12.5px")); //12
console.log(parseFloat("12.5px")); //12.5

//从左往右转换,直到结束或者遇到不能转换的值为止
console.log(parseInt("a123"));//NaN
console.log(parseInt("12a3"));//12


//parseInt(string(要转换的内容),radix(基数)) 2-36 默认10机制
console.log(parseInt("1110",8)); //

2.2转string

//String(转换的值) var n = 10; var s = "1"; var b = false; var nu = null; var u ; console.log(String(n)); //"10" console.log(String(b),b);//"false" false console.log(String(nu)); //"null" console.log(String(u)); //"undefined"

​ //变量.toString(radix) 2-36 ​ console.log(n.toString()); ​ console.log(b.toString()); // console.log(nu.toString()); 没有这个方法 // console.log(u.toString());

​ console.log(n.toString(8));

2.3 isNaN

//isNaN : is not a number :不是一个数字,检测一个变量是否是数字,返回布尔值 // 转换之前,会先使用Number方法进行转换,是数字:false 不是数字true console.log(isNaN(12)); //false console.log(isNaN("12.5")); //false console.log(isNaN("12.5px")); //true

3.运算符

1.算术运算符 + - * / %(求模) ++自加 --自减

console.log(10/4);//2.5 console.log(10%4);//2

var a = 10; //a++; //++a; //在赋值或者打印的时候,++在前,先自加,后赋值或打印,++在后,先赋值或打印,再自加 console.log(++a);

var a = 10; var b = a++ + ++a + a++; //b = 10 + 12 + 12 =34 a = 13 var c = ++a + ++b + b++; //c = 14 + 35 + 35 =84 a = 14 b=36 console.log(a,b,c);//a=14 b=36 c=84

var x = 1; var y = 1; x++; ++y;

var s = ++x + ++y + y++; //s =3 + 3 + 3=9 x = 3 y=4 console.log(x++,y,s);//x = 3 y = 4 s = 9

2.赋值运算符 = += -= *= /= %=

var x = 10; x += 3; // x = x + 3; 累加

3.比较运算符 > < >= <= ==相等 != 不相等 === 恒等 全等 !==

console.log("10000">"2");//false 字符串是一位一位比的,比较的是编

console.log("10"==10);//true 只要数值一样就可以 "10"--->10 console.log("10"===10); //false 值和类型必须都一样才相等

4.逻辑运算符 && || !

var s = 60; console.log(s>=70 && s<=100); //连接两个判断条件,两真为真

var s3 = 90; console.log(s3<60 || s3>100);//连接两个判断条件,一真为真

//true-false/ 非0为真 var s4 = 1 && 0; //两真为真,如果第一个条件为真,再去判断第二个条件,第一个为假,就不会再去判断第二条件 console.log(s4); //0

var s5 = 0 && 1; console.log(s5);//0

var s6 = (0 && 2); console.log(s6); //1 2

//一真为真,如果第一个条件为真,第二条件就不会去看,第一个为假,再去判断第二个 var t1 = 1 || 2; console.log(t1);//1

var t2 = 0 || 2; console.log(t2);//2

var t3 = 0 || false; console.log(t3);//false

//!非 取反 false true console.log(!(10>20)) ;//!false =true console.log(!0) ;//true console.log(!10) ;//false

5.三目运算符

//条件 ?条件成立时执行的代码 :条件不成立执行的代码 /* var day = 2; day == 7 ? console.log("睡到下午2点") : console.log("好好学习,天天向上");*/ var age = 7; age <= 6 ? console.log("在家玩泥巴") : console.log("上学校玩泥巴");

6. 判断性别

男 确定

//2.点击确定按钮,打印当前性别 oBtn.onclick = function () { console.log(girl.checked);//true false //判断第一个选择框,是否选中,如果结果为true,是选中的,打印女,没有选中,打印男 girl.checked == true ? console.log("女"):console.log("男"); }

7.隐式转换

//+ 101 + “age” = “101age” console.log(100+1+"Age"+10+20); //101age1020 +号遇到字符串,就会变成连接符 console.log(""+10+20);//1020 console.log("100"+2000);//1002000 console.log(true+false);//true---1 false----0 1 console.log(true+"10"); //true10 console.log(true+null); //true---1 null--0 1 console.log(10+undefined);//NaN

//运算过程中,都会尽可能转换为number //- console.log("100"-20); //"100"--100 80 console.log("100"-"20");//80 console.log("100"-"20px");//NaN console.log(100-null);//100 console.log(100-"");//100

//乘 * console.log(100*"a");//NaN console.log(100*""); //0 console.log(100*"100");//10000 console.log(100null);//0 console.log(100undefined);//NaN console.log(100*true);//100

//c除 / console.log(100/"a");//NaN console.log(100/"");//Infinity 无穷大 console.log(100/"70"); //1.... console.log(100/null);//Infinity console.log(100/undefined);//NaN

//取余% /console.log(100%"a"); console.log(100%""); console.log(100%"70"); console.log(100%null); console.log(100%undefined);;/

var n = "10"; n++; //“10” ---- 》 10 console.log(n) /* +号遇到字符串就是连接符(只要运算的其中有一个是字符串,直接拼接) 其他都会尽可能转换为number类型 */

不同类型比较规律

=== :一模一样才相等

​ ==:判断过程中有转换

​ 1、字符串和数字进行比较--先将字符串转换为number,在比较

​ 2、boolean和数字进行比较--先将boolean转换为number,在比较

​ 3、boolean和字符串进行比较--都转换为number,在比较

​ 4、数组和字符串进行比较--将数组转换为字符串,在比较

​ 5、对象和字符串进行比较--将对象转换为字符串,在比较

​ NaN不等于NaN

​ null等于undefined,除自身相等以外,和其他任意值都不相等

 console.log(true==1); //true
    console.log(true=="1");  //true--1  "1"--->1
    console.log([]==""); //[]---""  true
    console.log({}.toString()); //[object Object]
    console.log({}==""); //[object Object]
    console.log(NaN==NaN);//false
    console.log(null==undefined);//true
    console.log(null==null);//true
    console.log(undefined==undefined);//true

    console.log(null == 0); //false