简单数据类型及其转换

简单数据类型

在存储时变量中存储的是值本身,因此叫做值类型

1.Number数字型

NaN (not a number) 也是数字型

NaN 永远 不会等于 NaN (NaN == NaN 执行结果是 false)
JavaScript的规定, NaN表示的是非数字, 但是这个非数字也是不同的

定义
var age = 23;   //整数
var f =23.5 ;    //小数 
var num1 = 010;  //八进制
var num3 = 0xa;  //16进制
console.log(Number.MAX_VALUE); //数字型的最大值 1.7976931348623157e+308
console.log(Number.MIN_VALUE); //数字型的最小值 5e-324
console.log(Number.MAX_VALUE * 2);//无穷大 Infinity
console.log(-Number.MAX_VALUE * 2);//无穷小 -Infinity
判断是否为数字类型

isNaN() ---is not a number 非数字返回true ,数字返回false

会先使用Number()方法对括号内容转换数字类型,如果转换后为NaN则返回true,反之则返回false;

    var usAge = 21;
    
    console.log(isNaN(usAge));   //false

    var username = "lucy";
    console.log(isNaN(username));  //true
保留小数位数

Number.toFixed(n) 保留n位小数

返回小数对应的字符串,

如果多为小数,会按四舍五入方式转,精度会有问题。

和其余类型相加
数字
console.log(12+13);   //25  结果为数字型
字符
console.log("哈哈"+13) ;  //"哈哈13"    结果为字符型
布尔
console.log(true+1);  // 2 		结果为数字型
undefined
console.log(undefined + 1);  //NaN    结果为数字型
null
console.log(null + 3);   //3  结果为数字型

2.String字符串型

定义

字符串可以是引号中的任意文本,语法是双引号 " " 和 单引号 ''

var str='hello';   var str1="lili";

单双引号要错开使用

var str3 = "我是 'bob'";		var str4 = '我是"bob"';
字符串转义符

类似于HTML里的特殊符号,字符串也有特殊符号,我们称为转义符

转义符 都是以 \ 开头的

\n 换行符 \ \ 斜杠 \' 单引号 \" 双引号 \t tab缩进 \b 空格,b是blank的意思

如:var str = 'We\'ll never give up.'; // 使用反斜杠转义字符串中的单引号

引引加加
var  age=12;
console.log("我的年齡是age岁");  //我的年齡是age岁
// 引引相加
console.log("我的年齡是"+age+"岁");  //我的年齡是12岁
字符串转数组

split('分隔符') join把数组转换为字符串

var str2 = 'red,pink,blue';
console.log(str2.split(','));
var str3 = 'red&pink&blue';
console.log(str3.split('&'));
检测字符串的长度
var str="hello str";
console.log(str.length) ; //9
根据字符返回位置

字符串对象 根据字符返回位置 str.indexOf('要查找的字符',起始的位置号)

var str = '改革春风吹满面,春天来了';
console.log(str.indexOf('春'));  //2
console.log(str.indexOf('春', 3));// 8 从索引号是3的位置开始往后查找
console.log(str.indexOf('春', 2)); //2  
console.log(str.lastIndexOf('春')); //8

案例:查找字符串"abcoefoxyozzopp"中所有o出现的位置以及次数

 // 核心算法:先查找第一个o出现的位置
 // 然后 只要indexOf 返回的结果不为-1 就继续往后查找
 // 因为indexOf 只能查找到第一个 所以后面的查找,一定是当前索引加1,从而继续查找
        var str1 = 'abcoefoxyozzopp';
        var index = str1.indexOf('o');
        var total = 0;
        while (index !== -1) { 
            console.log(index);   //3,6,9,12
            total++;
            index = str1.indexOf('o', index + 1);
        }
        console.log('o出现的次数:' + total);  //4
根据位置返回字符

charAt(index) 根据位置返回字符

str[index] 和charAt(index)等效 H5新增 ie8支持

 var str = 'andy';
 console.log(str.charAt(3));  //y
 //遍历所有字符
 for (var i = 0; i < str.length; i++) {
        console.log(str.charAt(i));   //a n d y 
  }

charCodeAt(index) 返回指定位置处字符的ASCII码 目的:判断用户按了哪个键

 console.log(str.charCodeAt(0));//97 a

案例:判断字符串"abcoefoxyozzopp"中出现次数最多的字符,并统计其次数

        //核心算法:利用charAt()遍历这个字符串
        //把每个字符都存储给对象,如果对象没有该属性,就为1,如果存在了就+1
        //遍历对象,得到最大值和该字符
        var str1 = 'abcoefoxyozzopp';
        var o = {};
        for (var i = 0; i < str1.length; i++) {
            var chars = str1.charAt(i);
            if (o[chars]) {
                o[chars]++;
            } else {
                o[chars] = 1;
            }
        }
        console.log(o);
        //遍历对象
        var max = 0;
        var ch = '';
        for (var k in o) {
            //k得到的是属性名
            //o[k]得到的是属性值
            if (o[k] > max) {
                max = o[k];
                ch = k;
            }
        }
        console.log('最多的字符是:' + ch + ',次数为:' + max);
字符串拼接

concat('字符串1','字符串2',....)

等效于+,+更常用

var str = 'andy';
console.log(str.concat('red'));    //andyred

“+” 只要由字符串和其他类型变量/值相加,最终的结果都是字符串 (隐式转换)

数字
console.log("哈哈"+13) ;  //"哈哈13" 
console.log("12"+24);  //"1224"
字符
console.log("沙漠"+"骆驼");    //"沙漠骆驼"
布尔
console.log("哈哈" + true); //"哈哈true"
undefined
console.log(undefined + "哈哈");  //"undefined哈哈"
null
console.log(null +  "哈哈");   //"null哈哈"
截取字符串

都不改变原字符串

substr('截取的起始位置','截取几个字符'); 重点

 var str1 = '改革春风吹满地';
 console.log(str1.substr(2, 3));  //春风吹

slice(start,end) 从start位置开始,截取到end位置,end取不到(他们两都是索引号)

start<=item<end

 console.log(str1.slice(1, 3)); //革春
 console.log(str1.slice(-4, -1)); //风吹满

substring(start,end) 基本和slice相同 但是不接受负值

console.log(str1.substring(1, 3)); //革春
console.log(str1.substring(-4, 1)); //输出为空字符串""
替换字符串

替换字符.replace('被替换的字符','替换为的字符')

只会替换第一个字符 不改变原字符串

  var str = 'andy and anna';
  console.log(str.replace('a', 'b'));//bndy and anna

案例:有一个字符串'abcoefoxyozzopp’要求把里面所有的o替换为*

 var str1 = 'abcoefoxyozzopp';
 while (str1.indexOf('o') !== -1) {
      str1 = str1.replace('o', '*');
 }
 console.log(str1);  //abc*ef*xy*zz*pp
转换大写、小写

toUpperCase()转换大写

var str2 = 'red,pink,blue';
console.log(str2.toUpperCase());  //RED,PINK,BLUE

toLowerCase()转换小写

var str4 = 'AEIOU';
console.log(str4.toLowerCase());  //aeiou

3.Boolean布尔型

定义

布尔类型由两个值: true 和false,true表示真,false表示假

和其余类型相加

参与加法运算时 true=1 false=0

数字

true为1 false为0

console.log(true+1);  // 2  结果为数字型
console.log(false+1);  //1
字符
console.log(true+"骆驼");    //"true骆驼"   结果为字符型
布尔

true为1 false为0

console.log(true + true);  //2   结果为数字型
console.log(true + false);  //1
console.log(false + false);  //0
undefined
console.log(undefined +true);  // NaN  结果为数字型
null

true为1 false为0

null为0

console.log(true + null);   //1   1 + 0   结果为数字型
console.log(false + null);  //0   0 + 0

4.undefined

定义

一个变量 声明 未赋值 就是undefined 未定义数据类型

值为undefined,数据类型也是undefined

var str;
console.log(str);  //undefined
和其余类型相加
数字
console.log(undefined+13) ;  //NaN   结果为数字型
字符
console.log(undefined+"骆驼");    //"undefined骆驼"    结果为字符型
布尔
console.log(undefined + true);  //NaN   结果为数字型
undefined
console.log(undefined + undefined);   //NaN   结果为数字型
null
console.log(null + undefined);    //NaN   结果为数字型

5.null

定义

一个声明的变量给null值,里面存的值为空 (学习对象,研究null)

表示一个“空”值,即不存在任何值,什么都没有,用来定义空对象指针。

Null 其实使用属于 Object(对象)的一个特殊值。因此通过将变量赋值为 Null 我们可以创建一个空的对象。

如果有个变量我们以后打算存储为对象,暂时没想好放啥,这个时候就给null

var space=null;
console.log(space);  //null
和其余类型相加

参与加法运算时 null=0

数字
console.log(null+13) ;  //13   结果为数字型
字符
console.log(null+"骆驼");    //"null骆驼"    结果为字符型
布尔
console.log(null + true);  //1   结果为数字型
undefined
console.log(null + undefined);   //NaN   结果为数字型
null
console.log(null + null);    //0   结果为数字型

6.symbol

(ES6新类型-暂不关注)

复杂数据类型

在存储时变量中存储的仅仅是地址(引用)

Array Function Object .....

​ 对象、复杂数据类型 才有 属性和方法

​ --- 简单数据类型为什么会有length属性?

​ 基本包装类型: 就是把简单数据类型 包装成了 复杂数据类型

//基本包装类型 String Number Boolean
var str = 'pink';
console.log(str.length);
// (1)把简单数据类型包装成复杂数据类型 这样基本数据类型就有了属性和方法
var temp = new String('pink');
// (2)把临时变量的值给str
str = temp;
// (3)销毁这个临时变量
temp = null;

console.log(car1 === car2) // 引用数据类型是比较的内存地址,相同内存地址为true,不相同为false

引用数据类型中拷贝内存地址的方式叫浅拷贝

数据的深拷贝,创建一个新的内存地址拷贝数据

字符串不可变

------指的是里面的值不可变,虽然看上去改变了内容 但其实是地址变了 内存中新开辟了一个内存空间

var str = 'andy';
console.log(str);
str = 'red';//重新给str赋值时 常量'andy'不会被修改,依然在内存中
console.log(str);
//因为我们字符串的不可变所以 不要 大量拼接字符串
//字符串所有的方法,都不会修改字符串本身(字符串是不可变的),操作完成会返回一个新的字符串。

获取类型

获取变量的数据类型 typeof 最终返回的是一个字符串

console.log(typeof (13)); //number
console.log(typeof ('hello'));  //string
console.log(typeof (true));   //boolean
console.log(typeof (undefined));  //undefined
console.log(typeof (null));  //object

类型转换

使用表单,prompt获取过来的数据默认都是字符串类型,不能进行简单的加法运算,需要进行数据类型转换

var s = prompt("请输入一个数字");    //点确定 s的值为输入的值   点取消 s的值为null
console.log(typeof s)   // string 或者 null

转字符型

变量.toString
 var num = 10;
 console.log(num.toString()); //"10"
 var flag = true;
 console.log(flag.toString()); //"true"
 
// undefined.toString() 和 null.toString()报错   
String强转
console.log(String(11));  //"11"
console.log(String(true));  //"true"
console.log(String(null));  //"null"
console.log(String(undefined)); //undefined
隐式转换

字符串和任何类型相加都是字符串

console.log("!23"+12);  //"!12312"
console.log("!23"+true);  //"!123true"
.......

转数字型

parseInt转整型
console.log(parseInt(s));  
// "12" ---12  "12px"---12  "rem23px"-- NaN   "2w2" ----2   "12.444"---12
// "3.14" ---3   "3.96" ---3
// s 为布尔、undefined、null 时  结果都为 NaN
parseFloat转浮点型
console.log(parseFloat(s));
// "123" ---123  "123sss"---123  "ss23"-- NaN   "2w2" ----2  "12.444"---12.444
// s 为布尔、undefined、null 时  结果都为 NaN
Number强转
console.log(Number(s)); 
//"123" ---123  "123sss"---NaN  "ss23"-- NaN   "2w2" ----NaN  "12.444"---12.444
console.log(Number(true)); //1
console.log(Number(false)); //0
console.log(Number(null)); //0
console.log(Number(undefined)); //NaN
(- * /)隐式转换
console.log("23"-12) ;  //11
console.log("23"*12) ;  //276
console.log("23"/12) ;  //1.9166666666666667

console.log("2ss" - 11);  //NaN
console.log(true - 11);  //-10
console.log(false - 11);  //-11
console.log(null - 11);  //-11
console.log(undefined - 11);  //NaN

转布尔型

undfined, null , 0 , '' , NaN 都是false

0为false 1为true

其余 有值为 true 空值为false

console.log(Boolean(null))  //false
console.log(Boolean(undefined))  //false
console.log(Boolean(NaN))  //false

console.log(Boolean("123")) //true
console.log(Boolean(123))  //true
console.log(Boolean(""))  //false

console.log(Boolean(0))   //false
console.log(Boolean(1))  //true

console.log(Boolean({}))  //true
posted @ 2022-07-28 16:02  NomNom12138  阅读(45)  评论(0编辑  收藏  举报