JavaScript中的数据类型及数据间的相互转换

JavaScript中的数据类型及数据间的相互转换

  • js中的数据类型主要分为两大类
    • 基本数据类型
      • 数字 Number
        常规数字和NaN
      • 字符串 String
        所有拥单引号、双引号、反引号抱起来的都是字符串
      • 布尔 Boolean
        true/false
      • 空对象指针 null
      • 未定义 undefined
    • 引用数据类型
      • 对象数据类型 Object
        • {} 普通对象
        • [] 数组对象
        • /1?(\d|(-19))(.|)?$/ 正则对象
        • Math 数学函数对象
        • 日期对象
      • 函数数据类型 function

number 数字类型

包含:常规数字、NaN

NaN

not a number:不是一个数,但是隶属于数字类型
判断一个值是否是number类型,不能用判断该值是否==NaN,因为NaN和任何一个值都不相等,包括她自己,及NaN != NaN

isNaN

检测一个值是否为有效数字,如果不是则返回true,反之返回flase

  • 语法
    // isNaN[value]
    console.log(isNaN(10)) // false
    console.log(isNaN('a')) // true
    // Number('a') => NaN
    // isNaN(NaN) => true
    
    
    console.log(isNaN('10')) // false
    // Number('10') => 10
    // isNaN(10) => false
    
    
    /* 解释:在使用isNaN进行检测的时候,首先会验证被检测的是否为数字类型,
     * 如果不是,先基于Number()方法,把值转换成数字类型,再进行检测
     */
    

把其他类型值转换为数字类型

  • Number(value)

    把字符串转换成数字类型:只要字符串中包含任意一个非有效数字字符(第一个点除外)结果都是NaN;特别的,空字符串会转换成数字0

    console.log(Number('12.5'))  // => 12.5
    console.log(Number('12.5px'))  // => NaN
    console.log(Number(''))  // => 0
    
    • 把布尔转换为数字类型
    console.log(Number(true))  // => 1
    console.log(Number(false))  // => 0
    
    • null 和 undefined
    console.log(Number(null))  // => 0
    console.log(Number(undefined))  // => NaN
    
    • 把引用数据类型转换为数字类型

    把引用数据类型转换为数字,是先把该值基于toString()方法转为字符串,然后再转换为数字

    console.log(Numer({})) // => NaN
    // {}.toString() => "[onject object]"
    // Number("[object object]") => NaN
    
    console.log(Number([])) // => 0
    // [].toString() => ""
    // Number("") => 0
    
    console.log(Number([12])) // => 12
    // [12].toString() => "12"
    // Number("12") => 12
    
    console.log(Number([12,13])) // => NaN
    // [12,13].toString() => "12,13"
    // Number("12,13") => NaN
    

string 字符串数据类型

所有拥单引号、双引号、反引号包起来的都是字符串

把其他类型值转换成字符串

  • [val].toString()
  • 字符串拼接(加法运算可能存在字符串拼接)
基本数据类型转为字符串

除了null和undefined不能直接使用toStrng()方法,其他类型都可以通过toString()转成字符串,并转换后的结果只是多了引号,其他不变
null和undefined转为字符串也是一样的变成’null’和’undefined’,只是它们不能直接通过toString()来实现

console.log((true).toString()) // => "true"
let a = 13;
console.log(a.toString()) // => "13"
console.log((NaN).toString()) // => "NaN"

引用型数据类型转为字符串

数组对象、正则对象、函数对象等通过toString()方法转为字符串,跟基本数据类型转为字符串一样,就是多了双引号,内容不变;普通对象{}通过toString()转为字符串,统统都是"[object object]"

console.log(([12,13]).toString()) // => "12,13"
function a() {
  let a = 0;
}
console.log(a.toString()) // => "function a() {
  let a = 0;
}"

let res = /^(1-9)/
console.log(res.toString()); // => "/^(1-9)/"

console.log(({}).toString()) // => "[object object]"

额外的题目

let str = 10 + null + true + [12] + undefined + '字符串' + null + [] + 10 + false;
console.log(str)

boolean布尔数据类型

只有两个值 true/false

把其他类型的值转为布尔类型

只有0、NaN、’’、null、undefined这五个值会转为false,其余的全部转为true,并且没有任何特殊情况

Boolean()
console.log(Boolean(0)) // => false
console.log(Boolean(NaN)) // => false
console.log(Boolean('')) // => false
console.log(Boolean(' ')) // => true
console.log(Boolean(null)) // => false
console.log(Boolean(undefined)) // => false
console.log(Boolean([])) // => true
console.log(Boolean([12])) // => true
console.log(Boolean({})) // => true
!:取反(先转为布尔,然后取反)
console.log(!1) // => false
!!:取反再取反,只相当于转为布尔,等价于Boolean()
console.log(!!1)  // true 相当于Boolean(1)

null / undefined

null和undefined都代表的是没有

  • null:意料之中(一般都是开始不知道值,手动设置为null,后期再给予赋值操作)
let num = null;
num = 13;
  • undefined:意料之外(不是人为能决定,掌控的)
let num; // => 创建了一个变量但是没有赋值,默认值是undefined

object对象类型-普通对象

{[key]: [value], …} 任何一个对象都是由零到多组属性名不重复的键值对组成(属性名:属性值)
想要获取对象的属性值,一般通过 obj.key 或者 obj[key]来访问对象的某个属性值,特别的,当对象的属性为数字时,不能再通过.的方式获取属性值,只能通过 obj[key];
给对象添加属性和属性值:obj.key = value 或者 obj[key] = value

let obj = {
  name: '兰兰',
  age: 23,
  height: '160cm',
  12: '测试'
}
console.log(obj.name) // => '兰兰'
console.log(obj[age]) // => 23
console.log(obj.sex)  // => undefined
console.log(obj[12])  // => '测试'
console.log(obj.12)  // SyntaxError: 语法错误

  1. ± ↩︎

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值