《JavaScript高级程序设计 (第3版)》学习笔记3:chapter_3 - 2 dataType

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>dataType</title>

    <script>
        /*
        1, 5种简单数据类型:Undefined, Null, Boolean, Number, String
           1种复杂数据类型;Object -- 本质上是由一组无序的名值对组成的
           ECMAScript不支持任何创建自定义类型的机制(比如Java),所有的值最终都将是上述6种数据类型之一
        
        2,typeof操作符(见下) -- 检测给定变量的数据类型
           注意点:若返回的字符串为“object”,则这个值的类型可能是对象或者null
        
        3,Undefined类型:只有一个值undefined(一般不会显示书写)
            a, 使用var声明的变量但未对其加以初始化时,该变量的值就是undefined

        4,Null类型:只有一个值null(表示一个空对象指针)
            a,如果定义的变量将来用于保存对象,则最好将该变量初始化为null而不是其他值
            b,underfined值派生自null值,其两者判断返回true

        5,Boolean类型:使用最多的一种类型  true and false
            ECMAScript中所有类型的值都有与这两个Boolean值等效的值 -- Boolean()函数
            Boolean()函数转换:  true --> 非空,非0,非false,NaN

        6,Number类型:3种进制
            a, 浮点数值:ECMAScript会将可以作为整数的浮点数值转换为整数值
            b, ECMAScript会将小数点后面6个0以上的浮点数转换为e表示法表示的数值
            c, 永远不要测试某个特定的浮点数值(基于IEEE754数值浮点计算)  
               IEEE 754 标准是IEEE浮点数算术标准
                if(0.1 + 0.2 == 0.3){
                    alert("you've got 0.3");
                }


            d,  Number.MAX_VALUE:ECMAScript能够表示的最大值
                Number.MIN_VALUE:ECMAScript能够表示的最小值
                isFinite()函数 --> 判断一个数是否为有穷数

                Number.NEGATIVE_INFINITY:负的Infinity的值
                Number.POSITIVE_INFINITY:正的Infinity的值

            e, NaN(Not a Number):非数值,表示未定义或不可表示的值,或者说,表示一个本来要返回数值的操作数未返回数值的情况(这样就不会抛出错误)
                特点:第一,任何涉及NaN的操作(例如NaN/10)都会返回NaN;
                     第二,NaN与任何值都不相等,包括NaN本身
                isNaN()函数:(1)确定接收的参数是否为“不是数值”
                            接收到一个值,并将这个值转换成为数值
                            --> 某些不是数值的值会直接转换成数值,例如"10" or Boolean
                            --> 任何不能被转换成数值的值都会导致这个函数返回true
                            (2) 传入对象
                            valueOf() --> toString()

            f, 非数值转换成数值:
                Number():  可用于任何数据类型,转换字符串时不常用
                parseInt(): 字符串 --> 数值    解析数字字符
                parseFloat(): 字符串 --> 数值


        7,String类型:
            a,ECMAScript中的字符串是不可变的,即字符串一旦创建,他们的值就不能改变
            b,转换为字符串:
                (1) toString()方法:返回相应值的字符串表现【明确值不是null or undefined时使用】
                            数值、布尔值、对象和字符串值都有toString()方法,但null和undefined值没有
                            特殊:调用数值的toStirng()方法时,可以加一个基数
                (2) String()函数:将任何类型的值转换为字符串【不明确值是不是null or undefined时使用】
                (3) 加号操作符 




        8,object类型:
                    ECMAScript中的对象是一组数据和功能的集合
                    对象可以通过执行new操作符后跟要创建的对象类型的名称来创建
                    创建Object类型的实例并为其添加属性和(或)方法,就可以创建自定义对象
                    var o = new Object();

                    b,Object类型是所有它的实例的基础,即Object类型所具有的任何属性和方法也同样存在于更具体的对象中
                    c,Object的每一个实例都具有下列的属性和方法:
                        Constructor:构造函数。保存着用于创建当前对象的函数
                        hasOwnProperty(propertyName)  // 参数为字符串形式
                        isPrototypeof(object)
                        propertyIsNumerable(propertyName)  // 参数为字符串形式
                        toLocaleString()  // 返回对象的字符串表示 ,与执行环境地区有关
                        toString()  // 返回对象的字符串表示 
                        valueOf()   // 返回对象的原始值

        
        */
        // var message = "some string";
        // alert(typeof message);
        // alert(typeof message);
        // alert(typeof 98 );
        // alert(typeof null); // 特殊值null被认为是一个空的对象的引用,返回一个object

        // var abab;
        // alert(abab);

        // Undefined类型

        // var gender;  
        // // alert(gender);  // 声明但未初始化 -- undefined

        // alert(typeof gender);  
        // alert(typeof age);  // 未声明的变量只能使用typeof操作符检测该变量的数据类型 -- undefined
        // // 对未初始化和未声明的变量执行typeof操作符都返回了undefined值 --> 显式地初始化变量是个好习惯,此时,若typeof返回"undefined"值时,则表示检测到的这个变量还没有声明 
        // alert(age);  // 发生错误,因为age未声明
    
        // ----------------------------------------

        // Null 类型
        // alert(null == undefined);

        // ----------------------------------------

        // Boolean类型
        // var found = true;
        // var lost = false;
        // alert(found);  // true 不一定是1
        // alert(lost);  // false不一定是0
        // alert(found + lost);  // 1

        // var message = "hello world";
        // // var messageAsBoolean = Boolean(message);
        // // alert(messageAsBoolean);
        // if (message){  // 自动执行Boolean转换
        //     alert("Value is true");
        // }
        // ----------------------------------------

        // // Number类型
        //     var aInt = 10;  // 十进制
        //     var octalNum1 = 089;  // 八进制,以"0"开头
        //     var hexNum = 0xD;  // 十六进制,以"0x"开头
        //     // 算术计算时,所有以八进制和十六进制表示的数值最终都将被转换成十进制数值

        //     var aNum = .32;  // 不推荐
        //     var bNum = 1.0;  // 浮点数本身是一个整数,该值会被转换成整数
        //     var floatNum = 3.14e8; // 使用“e表示法”表示极大值
        //     var floatNum = 3.21e-8; // 使用“e表示法”表示极小值
        //     var floatNum2 = 0.00000000343;  // 自动转换为e表示法
        //     // alert(floatNum2);
        //     // alert(0.1 + 0.2);
        //     if(0.1 + 0.2 == 0.3){  // do not do such test!!
        //             alert("you've got 0.3");  
        //         }
            

        //     var result = Number.MAX_VALUE + Number.MAX_VALUE;
        //     alert(isFinite(result));

            console.log(231 / 0);  // infinity
            console.log(0 / 0);   // NaN
          
            
        //     console.log(NaN == NaN);
        //     console.log("-----------");
        //     console.log(isNaN(NaN));
        //     console.log(isNaN(10));
        //     console.log(isNaN("10"));
        //     console.log(isNaN(true));
        //     console.log(isNaN("blue"));
            
        //     // 数值转换 //
        //     console.log(Number(undefined));  // NaN
        //     console.log(Number(0x67));
                console.log(null);

        //     // 字符串时
        //     console.log(Number(' '));  // 0  空字符串输出的结果
        //     console.log(Number("00012"));  // 12
        //     console.log(Number('DFS12'));  // NaN
        //     console.log(Number(' 123'));

        //     console.log('-----------');    
        //     console.log(parseInt(" "));  // NaN   空字符串输出的结果
        //     console.log(parseInt("ui22221"));  // NaN 如果第一个字符不是数字字符或者负号,则parseInt()会返回NaN
        //     console.log(parseInt(" 12.31"));  // 12 忽视字符串前面的空格,直到遇到第一个非空格字符
        //     console.log(parseInt("2231blue")); 
        //     console.log(parseInt("0x89")); 
        //     console.log(Number("00012"));  // 12

        //     var num1 = parseInt('0xAF',16);  // 175
        //     var num2 = parseInt('AF',16);  // 175  指定16作为第二个参数,字符串可以不带前面的“0x”
        //     var num3 = parseInt('AF');  // NaN
        //     var num4 = parseInt('10',2);
        //     var num4 = parseInt('10',8);
        //     var num4 = parseInt('10',10);
        //     // 为了避免错误解析,无论何时下都明确指定基数

        //     console.log(parseFloat(" 12.313.21")); // 12.313
        //     console.log(parseFloat("0x23"));  // 0
        //     console.log(parseFloat("0987.21"));
        //     console.log(parseFloat("125blue"));
            
            // 注意:parseFloat()与parseInt()区别:
            //       1, 第一个小数点有效,第二个小数点无效
            //       2, 十六进制的字符串始终都会被转换成0(见上)



        // String类型
        //   单引号与双引号无区别

        var text = "this is an example text!";
        console.log(text.length);  // length返回字符串的数目

        var lang = 'Java';
        lang = lang + 'Script';
        console.log(lang);

        age = 11;
        found = true;
        ageAsString = age.toString();
        foundAsString = found.toString();

        // 加基数
        var num12 = 12;
        console.log(num12.toString());
        console.log(num12.toString(2));  // 1100
        console.log(num12.toString(8));  // 14
        console.log(num12.toString(10));


        // String()函数
        var num123 = 123;
        var blank;
        var nullValue = null;
        console.log(String(num123));
        console.log(String(blank));  // undefined
        console.log(String(nullValue));  // null

        
        // 加号操作符
        var addStringValue = 12 + '123';  
        console.log(addStringValue);
        console.log(typeof addStringValue);

        console.log('***********');

         // Object类型
         var o = new Object();
         console.log(o.constructor);
         console.log(o.hasOwnProperty('name'));
         console.log(o.propertyIsEnumerable('name'));
         console.log(o.toLocaleString());
         console.log(o.toString());
         console.log(o.valueOf());
        
         console.log("-----------");
         var arrN = new Array();
         console.log(arrN.constructor);
         console.log(arrN.hasOwnProperty('name'));
         console.log(arrN.propertyIsEnumerable('name'));
         console.log(arrN.toLocaleString());
         console.log(arrN.toString());
         console.log(arrN.valueOf());

    </script>

</head>
<body>
    
</body>
</html>

让学习“上瘾”,成为更好的自己!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值