JS笔记 ( 二 ) JS 的数据类型 类型转换 和 包装类

 
 
 

1. 数据类型

(1) 基本类型 ( 原始值 )

Number, String, Boolean, Undefined, Null

(2) 引用类型

Object, Array, Date, RegExp , Function …
 
 
 

2. 变量间的传值

  • js 中的变量是由值决定类型, 是弱类型
(1) 原始值传值
  • 原始值之间的传值是值传递, 新变量后续发生值改变并不会影响旧变量.
    因为旧变量传值给新变量时, 会在栈中新开一块内存, 并将值复制给新变量的栈内存
    新旧变量的栈内存间并没有地址联系, 因此互不影响.
(2) 引用值传值
  • 引用值之间的传值是引用传递, 即传递的是内存地址, 新旧变量共同指向同一个堆内存中的值
    因为引用值在栈中存放的其实是指向堆内存的地址,
    因此旧变量传值给新变量时, 也会在栈中开辟一块新内存, 但复制存放的是内存地址.
    所以若新变量后续发生值改变, 也会影响到旧变量, 让旧变量一起改变.

 
 
 

3. 类型转换

(1) Number(mix) 方法

  • 作用: 可将任意可转化为数字类型的值转化为数字
  • 参数表: 只有一个参数, 写入想要转化的变量即可
     
  • 示例 1: 将纯数字的字符串转化为数字
    显而易见, 最后接收转化后的数据的变量 num 是数字类型
    在这里插入图片描述
     
  • 示例 2: 将非十进制的数字字符串转化为十进制数字
    这里使用的是一个 16 进制的数字的字符串, 转化后变成 10 进制的数字
    在这里插入图片描述
     
  • 示例 3: 转化非纯数字字符串会失败
    显而易见, 最后得到的结果是 NaN(not a number), 不是一个数字
    在这里插入图片描述

 
 

(2) parseInt(num,type) 方法

  • 作用: 可将任意数字开头或能转化为数字的字符串进行以相应进制解析为对应数字, 默认 10 进制
  • 参数表: 两个参数, 第一个参数是转化的对象; 第二个参数是进制, 选填.
     
示例 1: 用来进行直接取整操作, 不进行四舍五入
  • 显而易见, 用这个方法可以对浮点数进行取整, 只保留整数位
    在这里插入图片描述
     
示例 2: 用来进行转化数字, 和 Number() 方法类似
  • 与 Number() 相同, 不再赘述
    在这里插入图片描述
     
示例 3: 用来截取以数字开头的混合字符串中前面的数字
  • 显而易见, 字符串开头的数字被截取出来了,
    可以推测, 截取的是非数字字符前的数字, ‘.’ 就是非数字字符

    在这里插入图片描述
     
示例 4: 用来以目标进制解析数字
  • 可以以任意介于 2~36 间的进制对数字进行解析并最终转化为 10 进制
    如例子所示, 定义数字 10000,
    第一次转化意义为: 将 10000 看做是 16 进制数字, 并转化为 10 进制数
    第二次转化意义为: 将 10000 看做是 2 进制数字, 并转化为 10 进制数
    在这里插入图片描述
     
     

(3) parseFloat(string) 方法

  • 作用: 可将任意数字开头或能转化为数字的字符串进行转化为浮点数
  • 参数表: 只有一个参数, 参数是转化的对象
示例: 用来截取以数字开头的混合字符串中前面的数字
  • 显而易见, 字符串开头的浮点数字被截取出来了,
    可以推测, 截取的是非数字字符除小数点外前的数字

    在这里插入图片描述
     
     

(4) toString(radix) 方法

  • 作用: 可把任意对象值转换为字符串, 这些值除了nullundefined都可以转换
    并最终返回 string 类型的结果, 默认进制是 10 进制
  • 参数表: 只有一个参数, 参数是 2~36 间的进制, 选填, 缺省值 10
  • 语法: Object.toString(radix)
示例 1: 转换 null 和 undefined 会出错
  • 提示出现无法获取类型的错误
    在这里插入图片描述
示例 2: 转化数字类型
  • 数字转化成了字符串
    在这里插入图片描述
     
示例 3: 转化布尔类型
  • 布尔转化成了字符串, 转化结果只有 true/false
    在这里插入图片描述
     
示例 4: 转化数组类型
  • 数组内容转化成了字符串, 数组成员间用逗号分隔
    在这里插入图片描述
     
示例 5: 转化日期类型
  • 日期内容转化成了字符串, 并按照所选时区的时间标准进行输出
    在这里插入图片描述
     
示例 6: 转化对象类型
  • 输出的是对象的类型
    在这里插入图片描述
  • 若转化的是函数, 输出函数体
    在这里插入图片描述

其它输出不再示范, 感兴趣可自己去试一下即可

 
 
 

4. 包装类和隐式转换

  • JS 中只有对象才有属性和方法, 原始值没有属性和方法
  • 但是当使用原始值调用类似 toString 的方法时, 却可以成功调用
    这是因为 js 中提供了三种特殊的引用类型 (String Number Boolean)
    当给原始值赋属性值时 后台都会进行隐式转换 调用包装类
包装类示例
  • 当我们生成一个变量, 如果所赋的值刚好是 string number 或 boolean 中的类型,
    当它调用属于包装类的一些属性或者方法时, 系统就会进行调用该类型的包装类
  • 如下所示
  • 这是前台直接调用的情况
    先给变量 str 赋值一个字符串, 然后调用 length 属性给 strlength 赋值,
    最终 strlength 能获取到字符串的长度, 并在控制台输出
var str = '123';
var strlength = str.length;
console.log(strlength);

在这里插入图片描述
 

  • 实际上是后台进行了一次隐式转换
  1. 首先后台会调用 String 包装类临时生成一个和 str 变量的值一样的 String 对象,
    假设这个生成的临时对象名称为 str0, 它是由 String 包装类的构造函数生成的,
    因此 str0 是可以调用 String 包装类内所定义的方法和属性的.
var str0 = new String('123'); 
  1. 然后第二步中变量 strlength 实际所获取的长度是 str0 的长度
var strlength = str0.length;
  1. 当不再需要调用包装类的属性或方法时, 临时对象 str0 会被销毁
    等再次需要调用的时候, 就会再生成一个和变量值一样的临时对象
str0 = null;
  • 注意的细节
    实际上, str 是变量, 并不能具有属性, 之所以能调用属性,
    是因为后台在调用包装类, 所对应的属性值是包装类的,
    变量的调用只是取出包装类的临时对象的属性值,
    并不能改变这个属性的值, 因为它本身没有这个属性.

  如下, 即使强行去给它调用的属性赋值, 也是无效的.
  因为这个属性不是它本身的. 并不能被它改变.
  在这里插入图片描述

发布了45 篇原创文章 · 获赞 0 · 访问量 1131

猜你喜欢

转载自blog.csdn.net/leon9dragon/article/details/103918423