博客
关于我
JS中的数据类型
阅读量:309 次
发布时间:2019-03-04

本文共 5599 字,大约阅读时间需要 18 分钟。

数据类型

简单数据类型:undefined / NULL / String / Number / Boolean

复杂数据类型:Object

1.undefined数据类型

  • 值定义后,没有初始化
  • 值定义后,用undefined来初始化
let a;console.log(a); // undefined

2.null数据类型

  • 空对象指针
  • 可用于对象变量的初始化
console.log(typeof null); // object

undefined和null的区别:

null对象值为空,undefined没有赋值

console.log(Number(null)); // 0      console.log(Number(undefined)); // NaN

3.Boolean数据类型

  • 只有两个值false和true
  • 其他可以使用Boolean()函数转换为布尔值

4.Number数据类型

(1) NaN

  • NaN是特殊的数值类型,它不是一个数
  • NaN和任何值进行操作都会返回NaN
  • NaN与任何值都不相等,包括NaN本身

(2) isNaN函数

  • isNaN意思是:是不是非数值,是的话返回true,所有能被该函数转换能Number类型的值,都返回false。
  • 在使用isNaN进行检测的时候,首先会验证检测的值是否为数字类型,如果不是,先基于Number()这个方法,把值转换成数字类型,然后再检测。
console.log( isNaN(NaN ) // true console.log( isNaN(10 ) // falseconsole.log( isNaN('10') // falseconsole.log( isNaN('blue') // trueconsole.log(isNaN( true )) // false (true会被转换成1)
  • 空字符串、空数组、布尔值、null会转成数值,所以isNaN函数返回false。
console.log(isNaN("")); // false        console.log(isNaN(" ")); // false        console.log(isNaN(null)); // false        console.log(isNaN([])); // false        console.log(isNaN(false)); // false
  • 空对象、函数、undefined不能转换成数值,返回true。
console.log(isNaN(function(){})); // true        console.log(isNaN(undefined)); // true        console.log(isNaN({})); // true

(3) 数值转换

数值转换:把非数值值转换为数值

  • Number()
console.log(Number(true)); // 1console.log(Number(false)); // 0console.log(Number(1)); // 1console.log(Number(null)); // 0console.log(Number(undefined)); // NaN        // 规则一Number("1") // 1Number("123") // 123Number("010") // 10 (前导的0会被忽略)Number("-10") // -10// 规则2Number("1.1") // 1.1Number("0.1") // 0.1Number("0000.1") // 0.1 (前导的0会被忽略)// 规则3Number(0xf) // 15 (16进制数转成10进制)// 规则4Number("") // 0Number(" ") // 0Number('') // 0// 规则5Number("Hello Wolrd") // NaNNumber("0ff6600") // NaNNumber("ff6600") // NaNNumber("0.1a") // NaNNumber("10a") // NaNNumber("a10.1") // NaN
  • parseInt(string, n)

将字符串转成n进制的数值

parseInt首先查看位置 0 处的字符,判断它是否是个有效数字;如果不是,该方

法将返回 NaN,不再继续执行其他操作。但如果该字符是有效数字,该方法将查看位置 1 处的
字符,进行同样的测试。这一过程将持续到发现非有效数字的字符为止,此时 parseInt() 将
把该字符之前的字符串转换成数字。

console.log(parseInt('a123')); // NaN        console.log(parseInt('123a')); // 123        console.log(parseInt('')); // NaN        console.log(parseInt("12.5px")); // 12        console.log(parseInt("0xf"));  // 15 (16进制)
  • parseFloat(string)

解析一个参数(必要时先转换为字符串)并返回一个浮点数。默认解析十进制值。

parseFloat("3.14") // 3.14parseFloat("-3.14") //-3.14parseFloat("+3.14") //3.14parseFloat("0003.14") // 3.14parseFloat(" 3.14 ") // 3.14parseFloat("3.14abc") // 3.14parseFloat("3.14.5678") // 3.14parseFloat("abc3.14") // NaNparseFloat("abc123") // NaNparseFloat("123abc") // 123
  • Number具有5个特殊属性(只读)
MAX_VALUE         :正数最大值,再大就会变成InfinityMIN_VALUE         :正数最小值,再小就会变成0NaN               :Not a NumberNEGATIVE_INFINITY :负无穷大,即-InfinityPOSITIVE_INFINITY :正无穷大,即Infinity
  • isFinite
    isFinite()监测是否是一个有限数值
console.log(isFinite(NaN)); // false        console.log(isFinite(Infinity)); // false        console.log(isFinite(-Infinity)); // false        console.log(isFinite('0')); // true
  • 0.1+0.2为何不等于0.3?

原因:在计算机中数字无论是定点数还是浮点数都是以多位二进制的方式进行存储的。

在JS中数字采用的IEEE 754的双精度标准进行存储(存储一个数值所使用的二进制位数比较多,精度更准确)

解决方法:想办法规避掉这类小数计算时的精度问题就好了,那么最常用的方法就是将浮点数转化成整数计算。因为整数都是可以精确表示的。

console.log(0.1+0.2); // 0.30000000000000004  console.log((0.1*10+0.2*10)/10) // 0.3

(4) toPrecision

把数字转成指定长度的字符串

let a = 1.324;        console.log(a.toPrecision(2)); '1.3'

(5) toExponential

把一个数字转换为指数计数法

let a = 1.324;        console.log(a.toExponential()); // 1.324e+0        console.log(a.toExponential(1));  // 1.3e+0

5.String数据类型

let a = 123;        console.log(String(a)); // '123'        console.log(a.toString()); // '123'        let b = [1,3,4];        console.log(String(b)); // 1,3,4        console.log(b.toString()); // 1,3,4        let c = false;        console.log(c.toString()); // 'false'        console.log(String(c)); // 'false'        let d = null;        console.log(String(d)); // 'null'        console.log(d.toString()); // 报错        let e = undefined;        console.log(String(e)); // 'undefined'        console.log(e.toString()); // 报错                let f  = 10;        console.log(f.toString(2)); // 1010(二进制字符串)

toString(n)中可转成n进制字符串,如果非数字的,则就转成普通字符串

js字符串中有其自带的一些方法可使用:

  1. slice(start, end)

字符串截取,如果没有end值,则截取到末尾最后一个;不改变原字符串

let str = 'abcdefg';        console.log(str.slice(3, 5)); // 'de'        console.log(str.slice(3)); // 'defg'
  1. substr(start, length)
let str = 'abcdefg';        console.log(str.substr(3, 1)); // 'd'        console.log(str.substr(3)); // 'defg'
  1. substring(start, end)
let str = 'abcdefg';        console.log(str.substring(3, 5)); // 'de'        console.log(str.substring(3)); // 'defg'
  1. indexOf和lastIndexOf

indexOf: 从头开始的第一个索引值

lastIndexOf:从尾部开始的第一个索引值

let str = 'abcbdefg';        console.log(str.indexOf('b')); // 1        console.log(str.lastIndexOf('b')); // 3
  1. trim()

trim() 方法用于删除字符串的头尾空白符,空白符包括:空格、制表符 tab、换行符等其他空白符等。

let str = '  abcbdefg  ';      console.log(str.trim()); // abcbdefg
  1. toLowerCase()和toUpperCase()
    toLowerCase 转小写
    和toUpperCase 转大写
let str = 'ABCDabcd';        console.log(str.toLowerCase()); // abcdabcd        console.log(str.toUpperCase()); // ABCDABCD
  1. replace()
let str = 'ABCDabcd';        console.log(str.replace(/A/g, '0')); // 0BCDabcd        console.log(str.replace(/A/gi, '0')); // 0BCD0bcd (不分大小写)
  1. fromCharCode()和charCodeAt()

fromCharCode() 可接受一个指定的 Unicode 值,然后返回一个字符串。

charCodeAt() 方法可返回指定位置的字符的 Unicode 编码

console.log(String.fromCharCode(72,69,76,76,79)); // HELLO       let str = 'HELLO';    console.log(str.charCodeAt(0)); // 72

6.Object数据类型

let a = [1,2,3];        console.log(typeof a); // object        let b = function(){};        console.log(typeof b); // function

typeof(是操作符,不是函数)可以用来检测数据类型或者函数

转载地址:http://yhoq.baihongyu.com/

你可能感兴趣的文章
wxPython中TextCtrl的输入上限问题
查看>>
Qt Creator编码
查看>>
【今日CV 计算机视觉论文速览 第97期】Tue, 9 Apr 2019
查看>>
第1讲 快速入门 《Kotlin 极简教程 》
查看>>
云计算-大数据-云安全高等教育改革示范教材
查看>>
使用MaxCompute进行数据质量核查
查看>>
Java语言特点与学习
查看>>
夜光精讲 Opentcs 三大算法(十三)调度算法
查看>>
error TS1192: Module ‘“fs“‘ has no default export.
查看>>
BCGControlBar教程:应用向导
查看>>
MyEclipse教程:Web开发——部署并测试项目
查看>>
【更新】CLion v2018.3发布(六):VCS和插件
查看>>
文件服务器——src文件夹
查看>>
从零构建通讯器--4.4-4.5信号在创建线程的实战作用、write函数写入日志设置成不混乱、文件IO详解
查看>>
从零构建通讯器--5.2三次握手,telnet,wireshark
查看>>
如何判断两个浮点数是否相等?
查看>>
苹果进军搜索,背后藏着什么“阳谋”?
查看>>
egg:如何在控制器中拿到前端传的参数
查看>>
struct 模块
查看>>
python之集合类型内置方法
查看>>