typeof 类型转换

127 阅读3分钟

编程的形式

面向过程:一种机械想法,如for循环...

面向对象:js半面向过程倾向于面向对象/java...

//1. typeof操作符:区分数据的类型 (number boolean string object undefined function)

例子

    // var num = true;
    // console.log(typeof(num));

    // var num = [1,2];
    // console.log(typeof(num));

    // var num = null;
    // console.log(typeof(num));

    // var num = function(){};
    // console.log(typeof(num));

// typeof还可以加空格当有括号使用

例子

    //  var num = undefined;
    //  console.log(typeof num);

2.类型转换js独有

(1)显式类型转换 (Number(转化为数字类型) / parseInt把里面的元素转化为整数 /parseFloat /Boolean / /)
// number转化为数字的结果

例一number:NaN

    // var demo = undefined;
    // var num = Number(demo);
    // console.log(typeof(num)+":" + num);

例二 number:NaN

    // var demo = "a";
    // var num = Number(demo);
    // console.log(typeof(num)+":" + num);

例三 number:NaN

    // var demo = "true";
    // var num = Number(demo);
    // console.log(typeof(num)+":" + num);

例四 number:1

    // var demo = true;
    // var num = Number(demo);
    // console.log(typeof(num)+":" + num);

例五 number:NaN

    // var demo = "NaN";
    // var num = Number(demo);
    // console.log(typeof(num)+":" + num);
// parseInt转化为整数,不关注非数字如true,undefined--->NaN 属性:number

例一number:NaN

    // var demo = true;
    // var num = parseInt(demo);
    // console.log(typeof(num)+":"+num);

例二number:2833

    // var demo = "b11";
    // var num = parseInt(demo,16);
    转化为整数 16是“a”以16进制为基础转化为十进制;范围写radix2-36
    // console.log(typeof(num)+":" +num);

例三100

    // var demo = "100px";
    // var num = parseInt(demo);
    // console.log(typeof(num)+":"+num);
// parseFloat转化成正常小数,属性number
    // var demo = "100.2.3abc";
    // var num = parseFloat(demo);
    // console.log(typeof(num)+":"+num);
// string转化为字符串 属性string

// to string

例一string:12

    //  var demo = 12;
    //  var num = demo.toString();
    //  console.log(typeof(num)+":"+num);

例二 undefined和null不能用toString

    // var demo = null;
    //  var num = demo.toString();
    //  console.log(typeof(num)+":"+num);

例三 转化为8进制==string:12

    //  var demo = 10;
    //  var num = demo.toString(8);
    //  console.log(typeof(num)+":"+num);

例四 把一个二进制数转化为16进制

    // var num = 1000;
    // var test = parseInt(num,2);
                     //   二进制转化为十进制
    // console.log(test.toString(16));
                     // 十进制转化为16进制
2 隐式类型转换 内部隐式调用的是显式的方法

隐式类型转换

// 例子 0

    // var num = 1 -"1";
    // console.log(typeof(num) +":" + num);
                 //属性             //值
例一 isNaN是非数,判断真假 -----> 对应Number
//       console.log(isNaN("abc")); 

// // 隐式转换的过程--把里面的数放在Number("abc") 里面,转化出来与NaN进行比对 是NaN <--> NaN就是true

//      console.log(isNaN(null));        false
        console.log(isNaN(undefined));   true

// null在Number里面是0 ,而undefined还是NaN

    // var num = null;
    // var demo = Number(num);
    // console.log(typeof(demo)+":"+demo);
以下隐式调用类型属性变为number

++

    // var a = "123";
    // a++; 
    // 先把"123"转化为数值,隐式调用显式Number("123"),再计算;  =124
    // var a = "abs"
    // a ++;
    // "abs"非数,结果就是NaN,通过隐式转换成typeof(a):number

-- +- 一元正负

    //  var a = +"abc";
    //  console.log(typeof(a)+":"+a);
    隐式转化为number:NaN

加号+例子

    // var a = a + 1;
    // console.log( typeof(a)+ ":" +a);
    结果:number:NaN

不一样的地方**------加号+两侧有一个是字符串的话,两个最后都会变成字符串string**

    // var a = "a" + 1;
    // console.log( typeof(a)+ ":" +a);
    结果:string:a1

乘号例子

    // var a = "1" * 1;
    // console.log(typeof(a)+":"+a);
    结果:number:1

比较的例子 字符串和数字比会转化为数字进行比较.

    // var a = "3">2;
    // console.log(typeof(a)+":"+a);   
    结果:boolean:true;

但字符串和字符串比没有类型转换,ASC码比较

    // var a = "3">"2";
    // console.log(typeof(a)+":"+a);

等于==和不等!=的例子

    // var a = 1 == "1";
    // console.log(typeof(a)+":"+a);
// var a = 1 != true;
// console.log(typeof(a)+":"+a);

**===和!==**不发生类型转换,左右必须相等 //特殊情况 NaN === NaN---> false

变量没定义会报错

// console.log(a);
// 特殊情况:未定义的变量放在typeof里面不报错,会打印值出来,返回undefined
// console.log(typeof(a));

特殊情况 返回字符串类型的undefined...typeof(typeof(a))="string"---typeof(a)="undefined"

//  console.log(typeof(typeof(a)));
//  console.log(typeof(typeof(a)+":"+(typeof(a))));

测试题

    // alert(typeof(a));
    // alert(typeof(undefined));
// 弹出来的undefined,在控制台里面typeof(a)返回字符串类型的undefined
    // alert(typeof(NaN));
    // 返回字符串类型的number
    //  alert(typeof(null));
    // 返回字符串类型的object
    //  var a = "123abc";
    //  alert(typeof(+a));
    // 返回字符串类型的number
// alert(typeof(!!a));
// 返回字符串类型的boolean
    // alert(typeof(a+""));
    // 显示string
    // alert(1=="1");
// alert(NaN == NaN);
    // alert(NaN == undefined);
    // alert("11"+11);
    // 都变成字符串1111
// alert(1 === "1");
    // alert(parseInt("123abc"));
// var num = 123123.345789;
// alert(num.toFixed(3));
保留3位小数
    //  typeof(typeof(a));
    // typeof(a)返回 "undefined",  typeof(typeof(a))返回 "string";