javaScript基础之数据类型

数据类型的分类:

1. 基础数据类型/简单数据类型:Number(数值型),String(字符串类型),Boolean(布尔类型),Null(空值),Undefined(未定义)

2. 引用数据类型/复杂数据类型:对象(Object类型)分为一般对象,Array,Function

 

检测变量的数据类型的两种格式:

1. typeof(变量);2. typeof  变量;(注意中间有空格)

 

typeof(变量)检测数据返回的数据类型取值有(6种):

"number", "string", "boolean", "object", "function", "undefined".

<script>
        /*
            在JS中采用typeof(变量);  或者  typeof 变量;  
            来检测变量的数据类型是什么;
        */
        var num = 12;
        console.log(num, typeof (num));  //12 "number"

        var str = "Karry";
        console.log(str, typeof str);  //Karry string

        var b = true;
        console.log(b, typeof (b)); //true "boolean"

        var n = null;
        console.log(n, typeof n); //null "object"

        var d;
        // undefined表示没有初始化的的变量
        console.log(d, typeof (d)); //undefined "undefined"
        // undefined 表示未定义的变量
        console.log(typeof (a)); //undefined  

    </script>

Number类型:主要是数值型,用于存储数据,参与数学运算。

主要有:整数,小数,负数,二进制,八进制,十六进制等都是数值型;

声明方式: var num = 1; (var 变量名 = 数值;)

特殊的Number类型:

  1. NaN: 表示不是一个数字,任何不能正常进行数学运算的或不能得到正常数字的都返回NaN;
  2. 无穷大/无穷小:Infinite/-Infinity 
  3. 小数相加会有偏差 比如0.1+0.2 !==0.3 ;  0.1 + 0.2 ===0.30000000000000004
<script>
        var num = 3;
        console.log(num, typeof num); //3 "number"
        // ----------------------------------------------


        var num1 = 3 / 0;//Infinity "number"
        var num1 = -3 / 0;//-Infinity "number"
        console.log(num1, typeof num1);

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

        var num2 = 3 / '4';  //0.75 "number"
        var num2 = 3 * '4';  //12 "number"
        var num2 = 3 - '4';  //-1 "number"
        
        /*
            如果是数字字符型的会转换成数值型  然后计算
        */

        // 乘除减一个非数字类型的值全都会返回NaN
        var num2 = 3 / 'a';
        var num2 = 3 / 'a';
        var num2 = 3 - 'a';
        console.log(num2, typeof num2); //NaN "number"

        // --------------------------------------------------
        // 加 则表示拼接 字符串
        var num3 = 3 + 'a';
        console.log(num3, typeof num3); //3a string
        // ---------------------------------------
        // var num4 = NaN;
        // var num4 = NaN / 2;
        // var num4 = NaN * 2;
        // var num4 = NaN - 2;
        // var num4 = NaN + 2;
        var num4 = NaN - "w";
        var num4 = NaN + "w";
        // NaN和任何数据类型进行运算时候,返回值全为NaN   且是数值类型
        // 除了拼接字符串除外...
        console.log(num4, typeof num4); //NaN "number"
    </script>

String数据类型:即字符串类型,是指用引号引起来的数据,单引号和双引号都可以。''  ,  ""  。

注意,当我们从input等表单控件中获取的用户输入的内容数据,均为字符串类型

字符串.length;  获取当前字符串的长度;

字符串.charAt(下标) :   获取字符串对应下标下的内容,下标从0开始;

<script>
        /*  
            声明方式:var str = '';/"";
            引号里面可以写内容
            
            String数据类型有两个方法
                获取字符串的长度  .length;
                获取字符串的下标    charAt(); 下标从0开始计算,ie7及其以下获取到的为undefined值
        */
        var str = "123321";
        console.log(str.length);//6
        console.log(str.charAt(1));//2

    </script>

Boolean类型:即布尔值类型;取值只有false和true两种类型的值。

<script>
        /*
            布尔数据类型:只有有个取值:true  false;
            声明方式:var flag = true;
                    var flag = false;

        */

        var flag = true;
        var flag = false;
        console.log(flag, typeof flag);

        console.log(10 > 100);//false
        console.log(10 > 1);//true  
    </script>

Null类型和Undefined类型:

Null类型取值是一个关键字null,注意Null和NULL都是变量!!!

<script>
        // Null:变量的值为空。如果一个变量你将来准备给它一个对象,但是现在没有给,我们就可以把它声明为null

        // Undefined:变量声明了没有赋值

        var n = null;
        console.log(n, typeof n); // null 'object'

        var u;
        console.log(u, typeof u); // undefined 'undefined'
  
    </script>

 null和undefined的区别

  • 1、undefined是申明了,未赋值,null是值为空,是准备在将来存储为一个对象的;

  • 2、undefined的typoef返回的是undefined,null的typeof返回的是object;

  • 3、undefined转成数字是NaN,null转成数字是0;

Object对象:Object是复杂数据类型,在页面中获取的所有元素都是对象类型。可以说万物皆对象。

  1. 对象的声明有两种方式,第一种使用new关键词创建一个对象;第二种使用var o = {}; {}里面写键值对,键值对以逗号分隔开来;
  2. 函数。声明函数,调用函数。函数是function; 
  3. 数组array。var arr = [可以存储任何类型的数据];   数组以[]来声明。
 <script>

        // 自己创建对象
        var o = {
            name: 'karry',
            age: '21',
        }
            
        //使用关键字new创建一个对象
        var obj = new Object();

        console.log(o, typeof o); //Objectage: "21"name: "karry"__proto__: Object "object"
        // ----------------------------------------
        // 数组 数组里面可以存储任何数据
        var arr = [0, 2, 'sdksdka', ['weq'], { age: 213, name: 'sad' }];
        console.log(arr, typeof arr); //(3) [0, 2, 3] "object"
        // ---------------------
        // 函数
        function fn() {
            // alert('你好');
        }

        console.log(fn(), typeof fn());//会先调用fn函数,然后控制台打印 undefined  "undefined"
        console.log(fn, typeof fn);
        /*
            ƒ fn() {
            alert('你好');
           }  "function"
        */

    </script>

数据类型的强制转换:

其他数据类型转Number类型:

       方式一: 采用Number(变量名) 进行强制转换成数值型
            字符串转数值型:
                如果是纯数字字符串转数值型,则取值为对应的数字内容;
                如果不是串数字还有其他字符,则返回NaN
                如果是空串 "" 或者 "   " 多个空格的字符串  均返回 0 值

            布尔值类型转数值型:
                false>>0 ;
                true>>1 ;
            
            null返回0
            undefined返回NaN

            对象数据类型: 转换成数值型  均返回为NaN  

 2.方式二: 采用parseInt(变量,进制)  可以根据进制来转换数字  且为整数
                采用parsrFloat(变量) 方法来进行转换     转换为浮点型  保留小数
            变量可以包含数字和其他字符,此方法会从第一个开始尽可能多的读取数字内容,遇到其他字符
            则不再读取转换。 parsrFloat 只读取一个小数点后的数字内容  多了也不再读取
                所以首字母不为数字的话,则返回均为NaN

<script>
        // 字符串转数值型
        // var str = "123ad";  //NaN
        // var str = "123";  //123
        // var str = "";  //0
        var str = "   ";  //0
        // console.log(Number(str));

        // =========================================
        // 布尔值类型转数值型:
        // var b = false;   // 0
        var b = true;   // 1
        // console.log(Number(b));

        // ===========================================
        // 
        var c = null;   //0
        var c = undefined;   //NaN
        // console.log(Number(c));
        // ==============================

        var obj = {
            name: 'karry',
            age: '21',
        }//NaN "object"

        var arr = [12, 32, 'aea']//NaN "object"

        // console.log(Number(obj), typeof obj);
        // console.log(Number(arr), typeof arr);

        // ================================================================
        var s1 = "123.213.213px";
        var s2 = "0123.213px";
        var s3 = "a0123.213px";
        var s4 = "123px";
        // console.log(parseInt(s1));  //123
        // console.log(parseFloat(s1));  //123.213
        // console.log(parseInt(s2, 8));  //83   8进制转换
        // console.log(parseInt(s2));  //123
        // console.log(parseFloat(s2));  //123.213
        console.log(parseInt(s3));  //NaN
        console.log(parseFloat(s3));  //NaN
        console.log(parseInt(s4));  //123
        console.log(parseFloat(s4));  //123
    </script>

转字符串String类型

        方式一: String(变量);
        方式二: 变量.toString();

            数值型转换成 数字字符串,NaN 转换成 字符串NaN
            布尔值  转换成 false true 字符串
            null 和 undefined 转换成 null和undefined 字符串
                但是不能用使用.toString();来转换。
            对象:  对象object转换成对象object
                    数组转换成 一个个的值以 , 连接

  <script>
        // 数值型的转换
        var num = 123;
        var num1 = NaN;
        num = num.toString();    //123 string
        num = String(num);      //123 string
        console.log(num, typeof num);


        num1 = num1.toString();    //NaN string
        num1 = String(num1);      //NaN string
        console.log(num1, typeof num1);
        // =======================================================

        // 布尔转换
        b = false;
        // b = b.toString();   //false string
        b = String(b);      //false string 
        console.log(b, typeof b);

        // null 和 undefined
        var c = null;
        var d = undefined;
        // c = c.toString();    //字符串不能为null
        // c = String(c); //null string
        // d = String(d);  //undefined string
        // d = d.toString();  //   Cannot read property 'toString' of undefined 
        console.log(c, typeof c);
        console.log(d, typeof d);
        // ============================================================
        var obj = {
            age: 12,
            name: 'kai'
        }

        var arr = [123, 'sdfs', ["asd", 1]]
        console.log(String(obj), typeof String(obj));   //[object Object] string
        console.log(String(arr), typeof String(arr));   //123,sdfs,asd,1 string
</script>

转Boolean类型值

 方式一: Boolean(变量);
            数值型的转布尔型: 0和NaN 均转换为 false
                                其他为true
            字符类型转布尔型: 空串 ""  转为false
                其他都为 true
            null    转为false
            undefined   转为false

            一切对象均为真
            JS中,只有 0, "", NaN, null, undefined, false 为假 其他均为真;

 <script>
        // 数值类型的转换
        // var num = 0;    //false
        // var num = 1;    //true
        var num = -1;    //true
        // var num = NaN;    //false
        // var num = NaN / 0;    //false
        console.log(NaN / 0);  //NaN
        console.log(Boolean(num));
        // ================================================

        // 字符串
        var str = "";       //false
        // var str = "12as";   //true
        // var str = "   ";  //true
        console.log(Boolean(str));


        console.log(Boolean(null)); //false
        console.log(Boolean(undefined));    //false
        // =================================================
        var obj = {
            age: 12,
            name: 'kai'
        }

        var arr = [123, 'sdfs', ["asd", 1]]
        console.log(Boolean(obj));  //true
        console.log(Boolean(arr));  //true

    </script>

isNaN函数:

 isNaN();    来判断一个数是否为是否是数字;
                不是数字,返回true,是数字,返回false。数字类型的NaN,返回true
        它本身不判断, 是Number()来判断,把参数交给Number,如果Number能转成功数字,就返回false,如果转不成功,就返回true

 <script>
        console.log(isNaN(NaN));    //true
        console.log(isNaN(12));     //false
        console.log(isNaN("12"));   //false
        console.log(isNaN("sad1"));   //ture
        console.log(isNaN(true));   // 1 ===>false 
        console.log(isNaN(null)); // 0 ===> false
        console.log(isNaN(undefined)); //  true
    </script>

运算符:

1.算术运算符

数值运算符:   + - * / % ++ -- (加、减、乘、除、取余、加加、减减)

算术运算符中特别需要注意的是加法运算 

  1. 如果加号的两边都是数字,则是普通的加法运算
  2. 如果有一边是字符串,则另一边也转成字符串,变成字符串的拼接
  3. 如果两边都没有字符串,则转成数字,再进行相加
  4. 如果有一边是对象,则调用对象的valueOf方法,如果没有valueOf,则调用对象的toString()方法,取得值,再应用上面的方法

其他算术运算就是先看能不能转换成数字,如何不能返回NaN,如何可以就可以进行正常的算术运算。

 <script>
        // 加 
        var a = '5';
        var b = 10;
        console.log(a + b);

        var a = 5;
        var b = 10;
        // console.log('5+10=15');
        console.log(a + '+' + b + '=' + a + b); // 5+10=510
        console.log(a + '+' + b + '=' + (a + b)); // 5+10=15

        // -------------------------------
        console.log(true + false); // 1
        console.log(true + null); // 1
        console.log(undefined + null); // NaN
        console.log(1 + [1, 2, 3]); // '11,2,3'

        // -------------------------
        // 加加、减减
        // 自增1 自减1,有加加在前和加加在后之分

        // var a = 10;
        // ++a; // a = a + 1;
        // console.log(a); // 11
        // --a; // a = a - 1;
        // console.log(a); // 10

        // 加加在前和加加在后的区别
        // 加加在后,先参与表达式的运算,再自增
        // 加加在前,先自增,再参与表达式的运算

        var num1 = 2;
        var num2 = 20;
        // var num3 = ++num1 + num2; // 1、num1自增  2、num1+num2
        var num3 = num1++ + num2; // 1、num1+num2   2、num1自增
        var num4 = num1 + num2; // 23
        console.log(num3, num4);


        // --------------------------
        var a = 10;
        console.log(a++);

        // ------------------------------
        // 取余
        console.log(10 % 3); // 1
        console.log(1 % 0); // NaN

        // 一个递增的变量,取模n,返回的是一个0到n-1之间的数
        console.log(0 % 3); // 0
        console.log(1 % 3); // 1
        console.log(2 % 3); // 2
        console.log(3 % 3); // 0
        console.log(4 % 3); // 1
        console.log(5 % 3); // 2
        console.log(6 % 3); // 0

        // ----------------------------------
        // 减、乘、除
        // 操作数的两边都转成数字
        console.log('10' - 5); // 5
        console.log('abc' - 5); // NaN
    </script>

2.赋值运算符

      赋值运算符: = += -= /= %=

 <script>
        var a = 10; // 把10赋给a

        a += 2; // a = a + 2;
        console.log(a); // 12

        a *= 5;
        console.log(a); // 60

        a %= 5;
        console.log(a); // 0

    </script>

3.比较运算符

 比较运算符: >= <= != == === !== > <

 <script>
        // 返回布尔值
        // > >= < <=   字符串比较字符编码,其它的都转数字比较
        // == !=       值的比较,会发生类型转换,null和undefined不转换 
        //         但是>= <= 运算会发生类型转换
        // === !==     值和类型都要相等


        // 字符串的比较,比较的是它的字符编码。从左向右,一位一位的比较
        // 字符的编码  0-48  A-65  a-97
        console.log('10' > '2'); // false

        // 数字的比较,如果有一边是数字,则另一边也转成数字,进行比较
        console.log(10 > 2); // true
        console.log(10 > '2'); // true

        console.log(10 >= '10'); // true
        console.log(10 <= '10'); // true

        console.log(null >= false); // true
        console.log(null >= undefined); // false


        // -----------------------------
        // == != 值是否相等(不推荐使用)
        // 值的比较,会发生类型转换(转数字)
        // null和undefined不能转换,它俩相等比较时,返回true
        console.log(10 == '10'); // true
        console.log(10 != '10'); // false

        console.log(true == 1); // true

        console.log(null == false); // false
        console.log(null == undefined); // true
        console.log(null != undefined); // false

        // -----------------------------
        // === !== (推荐使用)
        // 全等,是值和类型都要相等,不发生类型转换
        console.log(10 === '10'); // false
        console.log(null === undefined); // false
        console.log(null !== undefined); // true


        // ---------------------------
        // =   赋值
        // ==  值是否相等
        // === 值和类型都要相等(全等)
    </script>

4.逻辑运算符

 逻辑运算符: &&,  ||,  !

  1. && 与,两边都为真,结果为真。只要有一边为假,结果为假
  2.  || 或,两边都为假,结果为假。只要有一边为真,结果为真
  3. !非 ,取值均为反值。

    或和非的短路操作,只要左边能决定的,就不用跑到右边
        如果左边为真,则跑到右边;直接看右边,如果右边是表达式,则表达式求值,如果右边是值,则返回这个值
        如果左边为假,则不用跑到右边;直接看左边,如果左边是表达式,则表达式求值,如果左边是值,则返回这个值

 <script>
        console.log(10 > 8 && 10 >= 10); // true
        console.log(10 > 8 && 10 >= 11); // false
        console.log(10 > 8 && 5); // 5

        console.log(10 < 8 && 10 >= 8); // false
        console.log(0 && 10 >= 8); // 0

        console.log(5 && 3); // 3
        console.log(5 && NaN); // NaN
        console.log(5 && 5 > 3); // true
        console.log(5 && undefined); // undefined

        // ===============================================
        console.log(10 > 8 || 10 < 8); // true
        console.log(5 || 4); // 5
        console.log(5 > 6 || 4); // 4

        // ------------------------
        // ! 非: 取反
        var a = 10;
        console.log(!!!!!!!!a); //trues

    </script>

 

5三元运算符

语法格式:表达式 ? 执行语句1 : 执行语句2;

若表达式成立,则执行语句1,否则执行语句2;

优点:这种条件判断,结构格式比if...else..语句更加简洁;

缺点:只能判断两个条件,只能进行简单的值判断。

<script>
        // 表达式 ? 执行语句1 : 执行语句2;
        // 相当于if else

        var age = 18;
        // age >= 18 ? alert('成年') : alert('未成年');

        // 推荐写法
        var s = age >= 18 ? alert('成年') : alert('未成年');
        console.log(s);



    </script>

 

6.运算符的优先级

 ++ -- !(贴身) > 算术运算符 > 比较运算符 > 逻辑运算符 > 赋值运算符

 <script>

        console.log(5 + 4 * 3); // 17
        console.log((5 + 4) * 3); // 27
        console.log(10 > 5 > 4); // true > 4     false
        console.log(10 > (5 > 4)); // true 
    </script>

数据类型的隐式转换

+ - * / ++ -- %  ! 全都有隐式转换

 <script>
        // 隐式类型转换:相对于强制类型转换
        // + - * / % ++ 

        console.log('10' - 5); // 5

        var a = true;
        a++;
        console.log(a); // 2

        // --------------------------
        // 加 +
        console.log(10 + 100); // 110
        console.log(10 + 'string'); // 10string
        console.log(19 + 10 + 'age' + 18 + 10) // 29age1810
        console.log(10 + '100'); // 10100
        console.log(10 + true); // 11
        console.log(true + false); // 1
        console.log('10' + true); // 10true
        console.log('' + 100); // 100
        console.log(10 + null); // 10
        console.log(10 + undefined); // NaN
        // 减 -
        console.log(100 - 10); // 90
        console.log(100 - 't'); // NaN
        console.log(100 - ''); // 100
        console.log(100 - true); // 99
        console.log(100 - '80'); // 20
        console.log(100 - null); // 100
        console.log(100 - undefined); // NaN
        // 乘 *
        console.log(100 * 'a'); // NaN
        console.log(100 * ''); // 0
        console.log(100 * '100');// 10000
        console.log(100 * null); // 0
        console.log(100 * undefined);// NaN
        // 除 /
        console.log(100 / 'a'); // NaN
        console.log(100 / ''); // 无穷大
        console.log(100 / '70'); // 10/7
        console.log(100 * null); // 0
        console.log(100 * undefined); // NaN 
        // 取余 %
        console.log(100 % 'a'); // NaN
        console.log(100 % ''); // NaN
        console.log(100 % '70'); // 30
        console.log(100 % null); // NaN
        console.log(100 % undefined); // NaN
        // ++
        var n = '10';
        n++;
        console.log(n); // 11
        // 取反
        console.log(!true); // false
        console.log(!10); // false
        console.log(!'web'); // false
    </script>

常见的几个问题

1.null和undefined的区别:

null是声明的变量赋值为null,表示值为空;undefined 表示变量没有声明,值是空缺的,没有初始化变量。

2.NaN在声明情况下会出现,列举一些情况列子。

 NaN可以和任何数值运算(除了+运算) 最后都会得到一个NaN  而且每个NaN的值都不相等;

  1. 0/0会得到 NaN;
  2. !NaN  == >>> 1 true ;
  3. 1%0 ==>>NaN;
  4. 非数字进行运算会得到NaN;
<script>
        console.log(0 / 0); //NaN  
        console.log(100 % 0);  //NaN
        console.log(100 % '');  //NaN
        console.log(100 % '  ');  //NaN
        console.log(100 % []);  //NaN
        console.log(100 % {});  //NaN
        console.log(Number({}), typeof {});  //空对象 NaN "object"
        console.log(Number([]), typeof []);  //0 "object"
        console.log(Number(""), typeof "");  //0 "string"
        console.log(Number("  "), typeof "  ");  //0 "string"

    </script>

 

谢谢观看!!!

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值