JavaScript数据类型转换的学习(学习日记三)

一、概述

JavaScript 是一种动态类型语言,变量没有类型限制,可以随时赋予任意值。 虽然变量的数据类型是不确定的,但是各种运算符对数据类型是有要求的。如果运算符发现,运算子的类型与预期不符,就会自动转换类型。什么是字符串?如何手动强制转换数据类型?

二、字符串

         一、定义
                - 字符串就是零个或多个排在一起的字符,放在单引号或者双引号之中。
                - 单引号字符串内部可以使用双引号,双引号字符串内部可以使用单引号。
                - 如果要在单引号字符串内部使用单引号,就必须在内部的单引号前面加上转义符(反斜杠\),一个符号一个反斜杠。
                - 字符串默认写在一行,分成多行就会报错。
                - 连接运算符(+)可以连接多个单行字符串,可以多行书写,但输出的时候是单行(或长字符串必须分成多行,可以在每一行的尾部使用反斜杠。 )

        二、字符串和数组
                - 字符串可以被视为字符数组,可以使用数组的方括号运算符,用来返回某个位置的字符(位置编号从0开始)
                - 如果方括号中的数字超过字符串的长度,或者方括号中根本不是数字,则返回undefined
                - 字符串与数组只能实现查看,无法改变字符串之中的单个字符,即增删改不行

        三、length属性
                - length属性返回字符串的长度,该属性无法修改(用于查看字符串的长度)
                - 变量名.length

补充:如何区分方法和属性(带有小括号的是方法,没有括号的是属性)

var str1 = "a'b'c";
        console.log(str1);
        var str2 = 'a"b"c';
        console.log(str2);
//想在单引号里加单引号或者其他符号,就在该符号前加\
        var str3 = 'I\'m from \'China\'';
        console.log(str3);
//想多行写用加法运算符连接
        var longString = 'I'
        + 'am'
        + 'from'
        + 'China';
        console.log(longString);//IamfromChina
//或用反斜杠连接
        var longString = 'Long \
        long \
        long \
        string';
        console.log(longString);// "Long long long string"
//字符串应用数组的性质
        var c = 'very good!';
        console.log(c[0]);// v
        console.log(c[2]);// r
        console.log(c[4]);// 空格
        console.log(c.length);//10
//尝试用数组的修改,发现不能实现,所以字符串不能实现数组的增删改
        delete c[2];
        console.log(c);
        c[0] = 'B';
        console.log(c);
//如果方括号中的数字超过字符串的长度,则返回undefined
        console.log('abc'[7]);// undefined
//或者方括号中根本不是数字,则返回undefined
        console.log('abc'['x']);// undefined
        console.log('hello'[1]);

三、强制转换

        1、Number():使用Number函数或者方法,可以将任意类型的值转化为数值

                -字符串如果可以被解析为数值,则转换为相应数值,不能被解析则返回NaN,只要有字母等乱码哪怕有数字也不会被解析。

         2、String():使用String函数,可以将任意类型的值转化成字符串【或者变量名.toString()】

        3、Boolean():Boolean函数,以将任意类型的值转化成布尔值,除了以下五个值的转换结果为false,其它的值全部为true
                    - undefined
                    - null
                    - 0(包含-0和+0)
                    - NaN
                    - ''(空字符串)

四、自动转换
               

概念:自动转换是以强制转换为基础的,遇到以下三种情况的时候,JavaScript会自动转换数据类型,即转换是自动完成的,用户看不见
                - 不同类型的数据互相运算
                - 对非布尔值类型的数据求布尔值
                - 对非数值类型的值使用一元运算符(+和-)
                ① 自动转换为布尔值
                    - JavaScript遇到预期为布尔值的地方(比如if语句的条件部分),就会将非布尔值的参数自动转换为布尔值,系统自动调用Boolean()函数
                ② 自动转换为字符串
                    - JavaScript遇到只要有字符串开头的地方,就会将非字符串的参数自动转换为字符串,具体规则是:先将复合类型的值转为原始类型的值,再将原始类型的值转为字符串
                    - 字符串的自动转换,主要发生在字符串的加法运算时,当一个值为字符串,另一个值为非字符串,后者转化成字符串
                ③ 自动转换为数值
                    - JavaScript遇到预期为数值的地方,就会将非字符串的参数自动转换为数值,系统自动调用Number()函数
                    - 除了加法运算符(+)有可能把运算子转为字符串,其他运算符都会把运算子转换为数值(加法遇到字符串会优先拼接)
                    - 一元运算符也会把运算子转换为数值

 五、其它类型转化为数字类型:


                - parseInt() 转化成整数,向下取整
                - parseFloat() 转化成小数/浮点数

                - 都只能识别以数值开头的

 // 强制转换:Number()
        // 数值:转换后还是原来的值
        console.log(Number(123));// 123
        // 字符串:如果可以被解析为数值,则转换为相应的数值
        console.log(Number('3.14'));// 3.14
        // 字符串:如果不可以被解析为数值,返回NaN
        console.log(Number('3.14JavaScript;js'));// NaN
        console.log(Number('JavaScript;js'));// NaN
        console.log(Number('JavaScript;jsl3.14'));// NaN
        // 空字符串:0
        console.log(Number(''));// 0
        // 布尔值:true-->1    false-->0
        console.log(Number(true));// 1
        console.log(Number(false));// 0
        // undefined:NaN
        console.log(Number(undefined));// NaN
        // null:0
        console.log(Number(null));// 0

// 强制转换:String()
        console.log(String(123));// "123"
        console.log(String('abc'));// "abc"
        console.log(String(true));// "true"
        console.log(String(false));// "false"
        console.log(String(undefined));// "undefined"
        console.log(String(null));// "null"
        var num = 10;
        console.log(num.toString());

// 其它转换:parseInt()
        console.log(parseInt('3.14'));// 3
        console.log(parseInt('9.99'));// 9
        console.log(parseInt('3.14JavaScript;js'));// 3
        console.log(parseInt('JavaScript;js'));// NaN
        console.log(parseInt('JavaScript;js3.14'));// NaN

// 其它转换:parseFloat()
        console.log(parseFloat('3.14'));// 3.14
        console.log(parseFloat('999'));// 999
        console.log(parseFloat('3.14JavaScript;js'));// 3.14
        console.log(parseFloat('JavaScript;js'));// NaN
        console.log(parseFloat('JavaScript;jsl3.14'));// NaN



// 自动转化
        // 不同类型数据互相运算
        console.log(123 + 'abc');// '123abc'
        // 对非布尔值类型的数据求布尔值
        if('abc') {
            console.log('hello');//hello(先判断布尔值,字符串是true,所以可以打印)
        }
        // 对非数值类型的值使用一元运算符(+和-)
        console.log(+ {foo: 'bar'});// NaN
        console.log(- [1, 2, 3]);// NaN

// 自动转换为字符串
        console.log('5' + 1);// '51'
        console.log('5' + true);// '5true'
        console.log('5' + false);// '5false'
        console.log('5' + {});// '5[object Object]'
        console.log('5' + []);// '5'
        console.log('5' + function() {});// '5function() {}'
        console.log('5' + undefined);// '5undefined'
        console.log('5' + null);// '5null'

// 自动转换为数值
        console.log('5' - '1');// 4
        console.log('5' * '5');// 25
        console.log(true - 1);// 0
        console.log(false - 1);// -1
        console.log('5' - 1);// 4
        console.log('5' * []);// 0
        console.log(false / '5');// 0
        console.log('abc' - 1);// NaN
        console.log(null + 1);// 1
        console.log(undefined + 1);// NaN
        // 一元运算符也会把运算子转换为数值
        console.log(+'abc');// NaN
        console.log(-'abc');// NaN
        console.log(+true);// 1
        console.log(-false);// -0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr.MUXIAO

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值