[1]特点:只能存储一个值;
[2]分类-5中+es6新增1个
数据:整数、小数(浮点数)、正数、负数
注意问题:
不要比较小数的大小
原因:计算机内部所有的数据都是以二进制进行存储的,所以小数(由于精度问题)在转化时可能存在丢失,造成结果不准确
举例说明
console.log(0.3==(0.1+0.2)); //false
console.log(0.1+0.2) //0.30000000000000004
解决办法:将小数转化为整数,再进行计算/比较
console.log(0.1 * 10 + 0.2 * 10 == 0.3 * 10) //true
[1]NaN
NaN属于number数据类型,但是并不是一个数值;
当进行数学运算的时候,若是达不到正确的结果,一般值就为NaN
eg:
let a = 100;
let b = 'string';
let sum = a * b;
console.log(sum);//---输出NaN
NaN的特点
举例说明:
console.log(NaN == NaN)// false
console.log(NaN != NaN)// true
[2]Infinity
Infinity值为无穷大,-Infinity值为无穷小
eg:分母为0时
console.log(1/0);// Infinity
作用
[1]用于判断一个数是否为NaN(因为任何数与NaN比较都不想等,即使是他本身)
let a = 1111
console.log(isNaN(a)) //false
[2]用于判断一个字符串是否是全数字组成(is not a number)
是全数字,则返回false
不是全数字,则返回true
let a = '1111a'
console.log(isNaN(a)) //true
注:isNaN方法是Window的方法;
数据:使用引号括起来的就是字符串—使用单引号或双引号括起来的0个或多个字符即为字符串
注意问题:
默认,单引号内不能再包含单引号,但可以包含双引号
默认,双引号内不能再包含双引号,但可以包含单引号
原因:在遇到单/双引号时,默认会向后寻找 另一个单/双引号,若是找到默认此字符串结束;
eg:
let str='1233'1'
// 此时就会报错,原因因为str字符串到3就结束了
https://www.jianshu.com/p/cad25435f5a4
[1]作用:用于防止属性名冲突而产生的数据类型;
[2]特点
(1)Symbol数据类型不能使用 new关键字;
原因:Symbol数据类型没有基本包装对象;
Symbol可以修改this指向
function editthis () {
console.log(this)
}
editthis.call(Symbol('xx')) // {Symbol(xx)}
(2)使用Symbol方法生成数据,即使是参数相同 生成的数据也不相等
eg:
let sy = Symbol('xx')
let sy1 = Symbol('xx')
console.log(sy == sy1) //false
(3)数据类型为symbol
console.log(typeof sy) // symbol数据类型
(4)其主要作用是为了 避免对象属性名相同 而创建的
eg1:若是在对象中使用相同的属性名,后面的属性会把前面属性的值覆盖
let person = {
111: '111',
111: '222'
}
console.log(person) //{111:‘222’}
eg2:若是使用symbol数据类型作为属性就不用担心数据被覆盖的问题
let sy2 = Symbol('xx')
let person2 = {
[sy2]: '111',
[Symbol('xx')]: '222'
}
console.log(person2) //{Symbol(xx):'111',Symbol(xx):'222'}
(5)注意点:
let sy2 = Symbol('xx')
let person2 = {
[sy2]: '111',
[Symbol('xx')]: '222'
}
console.log(person2) //{Symbol(xx):'111',Symbol(xx):'222'}
// 在使用Symbol数据类型时不能够使用. 符号要用 []
console.log(person2[sy2]) //111
console.log(person2[Symbol('xx')]) // 这样获取---由于symbol生成的数据各不相同,所以值为undefiend
1.定义:数据类型的转化是将一种数据类型转化为另一种数据类型;
2.为什么要进行数据类型的转化:因为在js中 只有相同数据类型才可以进行直接计算;
1.定义:JS在进行计算时,数据类型不同自行转换;
当在进行+ 、+=进行运算–当其中一个值(只要有string类型就会触发)为string类型,会触发隐式转换
举例说明2:结果为NaN —因为即使是+运算,没有string类型的参数也不会触发string的隐式转化
function add (n1, n2) {
console.log(n1 + n2) // NaN
}
add(1)
结果为NaN
举例说明2 :计算 从左向右 进性计算 ;
let res=100+5+'10'
console.log(res); //10510
[1]100+5 (没有字符串不会触发隐式转化)值为105;
[2]105+‘10’ (‘10’为字符串会触发隐士转化) ‘105’+‘10’=10510—字符串拼接
当一个数据作为条件表达式时,会触发boolean隐式转换
例题1
let i = 0
let j = 0
i++ ? i++ : j = i
console.log(i)
console.log(j)
(1)i++ —先进行运算,再自加(不是进性完整个式子运算,而是当前这步)
(2)i=0 作为条件触发boolean的隐士转化为false; i=1
(3)执行j=i
(4)打印 1,1
例题2
console.log(!10)
10转化为boolean为true,取反为false
1.使用场景:当隐士转换不符合我们的需求时使用强制转换—一般是+ +=时;
语法:
Number(数据)
转化结果: 能合理转换就进行转换,转换不了就转换为NaN(NaN设计的目标就是用于接收这种无法转换的情况)
举例说明
console.log(Number()) // 0
console.log(Number('0')) // 0
console.log(Number(true)) //1
console.log(Number(false)) //0
console.log(Number(undefined)) //NaN
console.log(Number(null)) //0
console.log(Number('a')) // NaN
语法:
String(数据)
转化结果: 基本全部加‘’变为字符串
举例说明
console.log(String()) // ''
console.log(String(0)) // '0'
console.log(String(true)) //'true'
console.log(String(false)) //'false'
console.log(String(undefined)) //'undefined'
console.log(String(null)) //'null'
语法:
Boolean(数据)
转化结果: 有意义的转化为true,没有意义的转化为false
举例说明
<script>
console.log(Boolean()) //false
console.log(Boolean(0)) // false
console.log(Boolean('0')) //true
console.log(Boolean('')) //flase
console.log(Boolean(NaN)) //false
console.log(Boolean(undefined)) //false
console.log(Boolean(null)) //false
console.log(Boolean(''))
console.log(Boolean(' '))
console.log(Boolean([]))
console.log(Boolean('\n'))
</script>
[1]前提:.操作符是对象用来添加/访问属性值的
注:function,array本质也是对象
eg:
<script>
let obj = {
a: '111'
}
obj.b = '222'
console.log(obj.a, obj.b) // 111 222
</script>
[2]但是作为一个简单数据类型,为什么使用.操作符也不会报错呢
eg:
let a=10;
a.num=22
console.log(a); //10
[3]原因:当JS通过.访问符进行访问时,如果不是对象,JS会将数据封装成一个对象,封装成对象之后就可以使用.访问符进行访问了
[4]基本包装类型的执行原理:
1)在基本数据类型进行点操作时,JS会使用当前数据临时包装一个对象,再在这个对象上使用点语法
2)当本次的点操作结束后,会马上销毁临时包装的对象;
3)看起来什么都没有改变;
举例说明1
[1]定义了一个变量a
[2]a使用了点语法,js内部使用基本包装类型将a封装为1个对象调用点语法;
[3]使用结束,销毁基本包装类型,此时 a=10
[4]打印a.num时又使用了点语法,又封装为基本包装类型,但是这个包装类型中a对象的num属性没有被赋值,所以值为undefined
let a = 10
console.log(typeof a) // number
a.num = 22
console.log(typeof a); // number
console.log(a.num); //undefined
举例说明2
let a = 10
console.log(typeof a) //number
let objA = new Number(a)
console.log(typeof objA) // Object
举例说明3
[1]由于使用点语法但是undefined没有基本包装类型,所以会报错
let a = undefined
a.num = 10
console.log(a)
(1)语法:
(2)缺点:
(3)举例说明
console.log(typeof 0) // number
console.log(typeof '0') // string
console.log(typeof true) // boolean
console.log(typeof undefined) // undefined
console.log(typeof null) //object
let sy=Symbol('xx')
console.log(typeof sy); //symbol
isNaN(111) // false
(1)语法: 数据 instanceof 构造函数
(2)执行原理(本质):检测右面构造函数的原型对象是否在左侧数据地原型链上;
(3)缺点:结果存在不准确性;
(4)以检测数组为例(前提:数组的构造函数为Array)
console.log([111] instanceof Array); // true
console.log([111] instanceof Function); // false
console.log([111] instanceof Object); // rue
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FVMwvLla-1655886457869)(data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-weTmdHMg-1655886457870)(data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)]编辑
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-w7j9njmK-1655886457871)(data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)]编辑
(5)案例
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-43dYOsOF-1655886457871)(data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)]编辑
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CvBvh6KZ-1655886457872)(data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)]编辑
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-E7KSETrj-1655886457872)(data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)]编辑
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pTA3n8D9-1655886457872)(data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)](1)语法:Array.isArray(数据)
(2)举例说明:
console.log(Array.isArray([111])) //true
console.log(Array.isArray({ 1: '111' })) //false
(1)语法:Object.prototype.toString.call(数据)
(2)优点:
(3)原理:
(4)举例说明
console.log(Object.prototype.toString.call(1)) // [object Number]
console.log(Object.prototype.toString.call('1')) // [object String]
console.log(Object.prototype.toString.call(true)) // [object Boolean]
console.log(Object.prototype.toString.call(null)) // // [object Null]
console.log(Object.prototype.toString.call(undefined)) // [object Undefined]
console.log(Object.prototype.toString.call(Symbol('xx')))// [object Symbol]
console.log(Object.prototype.toString.call([111])) // [object Array]
console.log(Object.prototype.toString.call({ 1: '11' }))// [object Object]
console.log(
Object.prototype.toString.call(function a () {
console.log('11')
})
) // [object Function]