文章目录
JavaScript —— js数据类型
@(javascript)
js数据类型
number 数字类型
常规数字,NaN(not a number)隶属于数字类型,NaN和任何值包括自己都不相等 NaN!=NaN,不能用NaN判定是否为有效数字。
isNaN用于检测一个值是否为非有效数字,如果不是有效数字返回TRUE,是有效数字FALSE。
在使用“isNaN"检测的时候,首先会验证检测的值是否为数字类型,如果不是,先基于Number()这个方法,把值转换为数字类型,然后再检测。
把其他类型值转换为数字类型 Number([val])
-
string 把字符串转换为数字,只要字符串包含任意一个非有效数字字符结果都是NaN, 空字符串变为0;
console.log(Number('12.5')); 12.5 console.log(Number('12.5X')); NaN console.log(Number('')); 0
-
boolean
- console.log(Number(true)); 1
console.log(Number(false)); 0
- console.log(Number(true)); 1
-
null
- console.log(Number(null)); 0
-
undefind
- console.log(Number(undefined)); NaN
-
引用数据类型转化为数字,是先把他基于toString方法转换为字符串,然后再把字符串转换为数字;
- {} {XXC} .toString()" [object Object]" NaN
- [] [12,13] .toString()
parseInt parseFloat([val],[进制]) 把一个值转换为数字,对于字符串,从左到右查找有效数字字符,直到遇到非有效数字字符停止寻找,把找到的有效数字返回 parseInt整数parseFloat小数。
#####“ = =” 进行比较时候,可能出现把其他数据类型值转换为数字。
进行四则运算,要先通过number转换再计算。
string字符串数据类型
所有用“ ” ‘ ’ `(ES6模板字符串,)包起来的都是字符串。
其他数据类型值转换为字符串数据类型的规则
- toString
- [val].toString()
- (null).toString() 转换为字符串的结果就是’null’ toString报错 但是能转换
- (undefined).toString() 转换为字符串的结果就是’undefind ’ toString报错 但是能转换
- {}普通对象toString “[object object]’’
- 其他toString都是引号包裹
- 字符串拼接
- 四则运算法则中除加法之外,其余都是数学计算,加法可能存在字符串拼接,一旦遇到字符串,则不是数学运算,而是字符串拼接。
- [val].toString()
console.log('10'+10); "1010"
console.log('10px'-10); NaN
console.log('10'-10); 0
let a =10+ null+true+[]+undefined+‘珠峰’+null+[]+10+false;
‘11undefinf珠峰null10false’
Boolean 布尔值TRUE/FALSE
> 只有0、NaN、“”、null、undefind、五个值为FALSE,其他为TRUE
其他值转换为Boolean
- Boolean([val])
console.log(Boolean(0));false
- !或者!!代表boolean !表boolean再反 !!表boolean
console.log(!1);false
console.log(!!1);true
- 条件判断 如果条件只是一个值,不是==/===/!=/>=/等这些比较,是要把这个值先转换为布尔值,然后验证真假。
if(){
console.log(‘haha’)
}
true输出,false不输出
null/undefind
null代表没有,null指意料之中:开始手动设置为null,后期再赋值。(手动设置0,栈内存中有自己的存储空间)
undefind也代表没有,undefind指意料之外(默认机制)。创建一个变量没有赋值。
object -普通对象
{[key]:[value],……} 任何一个对象都是由零到多组键值对(属性名:属性值)组成的(并且属性名不能重复)
对象的属性名只有两种格式:数字或者字符串(等基本类型 null,undefind,true)
如何获取
let person = {
name:'name',
age:23,
height:'185cm',
weight:'80kg'
};
输出属性名的属性值的两种方式
console.log(person.name);
console.log(person['age']);
如果当前属性名不存在,默认的属性值是undefined
如果属性名是数字,输出只能采用第二种[]的方式
设置属性名属性值
属性名的设置不能重复,如果重复属于修改之前属性名的属性值
person.GF = 'zz';
console.log(person['GF']);
person.name = 'jj';
console.log(person['name']);5
删除属性名
真删除:把属性清除。假删除是清除属性值
person.weight = null; 假删除
console.log(person);
delete person['name']; 真删除
console.log(person);
object -数组对象
数组对象是特殊的数据类型
- 我们在[]中编写的是属性值,它的属性名是默认生成的数字,从0开始逐级递增,而且这个数字代表每项的位置,我们称其为"索引".
- 默认一个属性名length,存储数组的长度.
let ary = [12,'haha',true,13];
console.log(ary);
console.log(ary['length']);
console.log(ary.length);
(4) [12, "haha", true, 13]
0: 12
1: "haha"
2: true
3: 13
length: 4
__proto__: Array(0)
第一项索引
console.log(ary[1]);0
第三项索引
console.log(ary[3]);
倒数第一项索引
console.log(ary[ary.length-1]);
数组末尾添加内容
栈内存
浏览器想要执行JS代码
- 从电脑内存中分配出一块内存,用来执行代码(栈内存stack)
- 分配一个主线程用来自上而下执行JS代码
基本数据类型:按值操作,叫做值类型
引用数据类型:操作的是堆内存的地址,按引用地址操作。