前端-JS数据类型与类型转换复习

数据类型

#1. 数据类型

  • 基础数据类型
    • number 数字
    • string 字符串
    • boolean 布尔值
    • undefined 未定义
    • null 空指针
    • symbol 唯一值(新增)
    • bigInt 大整数(新增)
  • 引用数据类型
    • object 对象

使用 typeof 操作符可以用来检测数据的类型。

#Number类型

JavaScript不区分整数、浮点数等,统一都叫Number。typeof 100 得到 "number"

  • 数值字面量

    10 1.5 -20

  • 浮点数精度问题

    console.log(0.1+0.2);

    console.log(0.7*100);

    JavaScript中采用 IEEE 754 标准 (opens new window)的 64 位双精度浮点数。数值的运行会先将数值转为二进制,而这种标准下小数可能会出现表示不全的情况,从而最终的结果出现误差。(有汇编基础的同学可以自行进一步了解)

    如果为了得到相对准确的结果,一般会将小数转为整数之后再进行运行,最后除以倍数。例如:console.log( (0.1*100+0.2*100)/100 );

    toFixed(1) 精确小数点

  • 数值范围

    根据标准,64位浮点数的指数部分的长度是11个二进制位,意味着指数部分的最大值是2047(2的11次方减1)。也就是说,64位浮点数的指数部分的值最大为2047,分出一半表示负数,则 JavaScript 能够表示的数值范围为21024到2-1023(开区间),超出这个范围的数无法表示。

    如果一个数大于等于2的1024次方,那么就会发生“正向溢出”,即 JavaScript 无法表示这么大的数,这时就会返回Infinity。相反,最大负数为 -Infinity

    Infinity-Infinity 也是数字的一种。

    let num  = 30;   //整数(十进制)
    
    -----以下内容只需要了解
    
    //八进制处理 (范围0~7)
    let octalNum = 070;  //八进制数字 56
    let octalNum2 = 079;  //无效的八进制值,当成79处理
    let octalNUm3 = 08; //无效的八进制值,当成8处理
    //十六进制处理 (范围0~9以及A~F)
      let hexNum1 = oxA;  // 十六进制 10
      let hexNum2 = ox1f; //十六进制 31
      
    
    //小数表示
    
    let floatNum1 = 0.1;   //小数也是一个Number类型
    let floatNum2 = 0.2;
    
    let result = floatNum1+floatNum2;  //结果不是预期中的 0.3
    
    解决方案:
    
    console.log( (0.1*100+0.2*100)/100 );
    
    num.toFixed(1)  精确小数点
    
      
      
    
    

#String类型

用来放一段文字。typeof "文字文字" 得到 "string"

  • 字符串字面量

    “文字” ‘ababa’ abcd

    三种引号都可以用来表示字符串数据。

    let firstName = "鲁班";
    let secondName = '鲁班七号';
    let otherName = `卤蛋`;  //暂时了解   es6里面细讲
    
  • 转义字符

    如果想在字符串使用引号文字:

    console.log(  "It's an apple."  ); //一种引号里面使用其他两种引号没有问题
    
    console.log( "John:\"I love you.\"" ); //内部使用字面量相同的引号,则需要使用 \ 转义符号
    

    其他转义含义:

    img

  • 字符串拼接

    进行 + 运算时,两边任意一边的数据是字符串的话,则是拼接的功能

    console.log("123" + "4"); //"1234"
    console.log("123" + 4); //"1234"
    console.log("zzt" + "666"); //"zzt666"
    
    
    拓展知识点:
      let firstName = "java";
      firstName = firstName+"script";
    
    首先会在内存中分配一块能够容纳10个字符的空间,然后填充上,java,script,  最后会销毁原来的 java字符和script字符,这也是早期的浏览器进行字符串拼接非常慢的原因   
    
    
    
    

#Boolean类型

布尔值类型只有两个值:真true 和 假false。用于判断。

typeof true得到"boolean"

let found = true;
let lost = false;

//类型转换
let message = "鲁班";
let message = Boolean(message);

#Undefined类型

未定义类型的值为undefined

在变量没有被赋值时,默认值也为undefined

typeof undefined得到"undefined"

let message;
console.log(message == undefined);  //true

//等同于

let message = undefined;
console.log(message == undefined);  //true
******************************
注意:包含undefined值的变量跟未定义变量是有区别的.请看下面的列子:

let message;

console.log(message); // "undefined"
console.log(age);   //不能存在的变量age  会报错



//怪异行为,让人困惑

let  message;
console.log(typeof message); //"undefined"
console.log(typeof age);   //"undefined"

//利用"bug" 处理问题

 if(typeof age !== "undefined"){
      console.log("有的有的!");
 }else{
     console.log("压根就不存在");
 }






#Null类型

nullundefined 意义很接近,都表示“没有”。null可以理解为一个“空”对象,但是并不占据内存空间。通常在一个变量即将在后续的逻辑中被赋予一个对象值,但是刚开始定义的时候不能确定到底是哪个对象值时,赋予它初始值null

注意:typeof null得到"object"

很实用的方法:在将来要保存对象值的变量时。建议使用null 来初始化, 不要使用其他值.这样检查这个变量的值是不是null 就可以知道这个变量是否在后来被重新赋予了一个对象的引用.

if(timer != null){
    //timer是一个对象的引用
}


nullundefined 的关系  
console.log(null == undefined); //true

#2. 显示类型转换

可以使用Number(数据) String(数据) Boolean(数据),将数据转换成对应的类型。

parseInt() parseFloat() 可以用来取整数或者浮点数。

let num = "123";
let fixNum = Number(num);   //123  Number类型

let str = 56;
let fixStr = String(str);  //'56'  String类型

//字符串转化万能方法
 let age  =  11;
 let fixAge = age.toString();   //字符串 "11"
 let found = true;
 let fixFound = found.toString();  //字符串 "true"

//特殊使用  (了解,不需要掌握)

 let num = 10;
 console.log(num.toString(2));   //转化成二进制  1010
 console.log(num.toString(8));  //转化成八进制 "12"
 console.log(num.toString(16));  //转化成十六进制 "a"




let  foo =  null;    //尝试undefined,null...... 不同的数据类型
let fixFoo = Boolean(foo);



let result = parseInt(ma120px); //NaN    






作业

作业要求: 使用输入弹出框分别输入姓名,年龄,爱好, 然后在控制台打印 格式如下

姓名:鲁班
年龄:18
爱好:打游戏

tring(16)); //转化成十六进制 “a”

let foo = null; //尝试undefined,null… 不同的数据类型
let fixFoo = Boolean(foo);

let result = parseInt(ma120px); //NaN


# 作业

   作业要求: 使用输入弹出框分别输入姓名,年龄,爱好, 然后在控制台打印  格式如下

姓名:鲁班
年龄:18
爱好:打游戏


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值