JavaScript数据类型

复杂(引用)数据类型

包括:Object、Array、Function、RegExp、Date、Map、Set、Symbol等

基本数据类型

包括:Number、String、Boolean、Undefined、Null

Number

包括:所有数字,不分大小、不分整浮、不分正负

小数中0可省

var a = .5;

较大数或较小数(绝对值较小)可以写成科学计数法

 var a = 3e5;
 console.log(a);//300000
 var b = 3e-5
console.log(b);//0.00003

不同进制的数字

二进制以0b开头

0b10    //2
0b1111  //15

八进制以0开头

017     //15

十六进制以0x开头

0xf      //15

特殊的值NaN

用于指示未定义或不可表示的值

 typeof NaN;  //number
NaN何时出现

1.NaN 参与运算
2.不定式
下列除法运算:0/0、∞/∞、∞/−∞、−∞/∞、−∞/−∞
下列乘法运算:0×∞、0×−∞
下列加法运算:∞ + (−∞)、(−∞) + ∞
下列减法运算:∞ - ∞、(−∞) - (−∞)
3.产生复数结果的实数运算。
例:
对负数进行开偶次方的运算
对负数进行对数运算
对正弦或余弦到达域以外的数进行反正弦或反余弦运算

NaN不自等,特别地在Set中相等
NaN == NaN //false
NaN === NaN //false
isNaN()判断变量值是否为NaN
isNaN(NaN)//true
isNaN(5)//false

机理:该变量传入Number()的执行结果是NaN,则结果就是true

Number(NaN) //NaN
Number('3天') //NaN
Number(undefined) //NaN
Number(null) //0 
isNaN(NaN) //true
isNaN('3天') //true
isNaN(undefined) //true
isNaN(null) //false

String

字符串和变量拼接

可将变量插入到字符串中

var year = 2022;
var str = '北京冬季奥运会在' + year + '年召开';

注意:新版ES中增加了反引号表示法,可以更方便进行变量插值,后续课程将进行介绍

属性-length

字符串的长度

'我喜欢JS'.length   //5
''.length   //0

方法-提取子串

substring(start ,[end])
slice(start,[end])
substr(start ,[length])
若省略start,则从索引 0 开始提取
若省略 end/length, 则提取到数组/字符串末尾
区别:
1.参数位置是否可交换
substring()可自动交换两参数位置;而slice()不可且若一参>=二参则返回空字符串

'abcde'.substring(3, 1);//'bc'
'abcde'.slice(3, 2);//''

2.参数正负
slice()参数可以是负数;而substring()不可。
一参或二参为负数:表示在 原数组/字符串 中的倒数第几个元素开始提取或 结束提取。slice(-2)表示提取 原数组/字符串 中的倒数第二个元素到最后一个元素(包含最后一个元素)

'abcde'.slice(-4, -2);//'bc'
'abcde'.substring(-4, -2);//''

方法- indexOf() 检索位置

indexOf()返回某个指定的字符串值在字符串中首次出现的位置
如果要检索的字符串值没有出现,则该返回-1

'abcdeb'.indexOf('b')//1
  'abcdeb'.indexOf('de')//3
  'abcdeb'.indexOf('m')//-1

Boolean

值只有两个:true和false

Undefined

表示"缺少值",此处应该有值,但还未被定义
用于指示变量尚未赋值
undefined的类型也是undefined;即:undefined是值,又是一种类型,该类型只有它自己一个值

何时出现?
1.被var声明,但未被赋值的变量,其默认值是undefined
2.对象未被赋值的属性,其默认值是undefined
3.函数调用时,应提供的参数未提供,该参数默认值undefined
4.函数没有设置返回值,其默认值是undefined

 var i;
  console.log(i); // undefined

  var o = new Object();
  console.log(o.p); // undefined

  function f(x) {
    console.log(x); // undefined
  }
  f();

  function fn() {
    var hometown = "赣州市于都县";
    //无返回值;
  }
  var b = fn();
  console.log("fn()函数的返回值=" + b); //fn()函数的返回值=undefined

null

表示"没有对象",即此处不该有值
用于指示变量中未包含有效的数据

典型用法:
1.作为函数的参数,表示该函数的参数不是对象
若需传递参数且参数是对象,但暂时不想传递或不需要传递,可以传null ;
2.作为对象原型链的终点

Object.getPrototypeOf(Object.prototype) //null

3.内存回收-对象销毁、数组销毁

obj = {
    'name': 'xyz',
    'age': 18
}
// 内存回收
obj = null
console.log(obj)

4.删除事件监听

//删除事件监听
box.onclick=null

特别的,使用typeOf时,null 会被误判为object

原理:不同对象在底层都表示为二进制
在 JavaScript 中,二进制前三位都为 0 时,会被判为 object
null 的二进制表示是全 0,自然前三位也是 0,故 typeOf null 结果为object

辨析复杂数据类型、基本数据类型

变量传值时

1)基本类型–内存中产生新副本,新变量指向不同地址的不同对象

var a = 3;//3在内存中
var b = a;// 3在内存中克隆一次放入新地址,变量b再指向这个新地址中的3
a++;
console.log(b);//3
console.log(a);//4

2)引用类型–内存中不产生新副本,新变量指向同一地址的同一对象

var arr1 = [1, 2, 3];// [1, 2, 3]在堆内存中
var arr2 = arr1;//不会克隆,arr2与arr1指向同一地址
arr1.push(4);
console.log(arr1);//[1, 2, 3,4]
console.log(arr2);//[1, 2, 3,4]

判等

1)基本类型–比较值是否相等

console.log(2 == 2);//true

2)引用类型–比较址是否相同,即是否是同一对象

 console.log([] == []);     //false
 console.log([1, 2] == [1, 2]); //false 

辨析undefined、null、NaN

所属数据类型

typeOf undefined// undefined
typeOf null// object
typeOf NaN// number

作用

undefined:用于指示变量尚未赋值(表示"缺少值",此处应该有值,但还未被定义)
null:用于指示变量中未包含有效的数据(表示"没有对象",即此处不该有值)
NaN:用于指示未定义或不可表示的值

产生原因(用于何处?)

undefined:
1.被var声明,但未被赋值的变量,其默认值是undefined
2.对象未被赋值的属性,其默认值是undefined
3.函数调用时,应提供的参数未提供,该参数默认值undefined
4.函数没有设置返回值,其默认值是undefined
null:
1.作为函数的参数,表示该函数的参数不是对象
若需传递参数且参数是对象,但暂时不想传递或不需要传递,可以传null ;
2.作为对象原型链的终点
3.内存回收-对象销毁、数组销毁
4.删除事件监听

NaN:
1.NaN 参与运算
2.不定式
下列除法运算:0/0、∞/∞、∞/−∞、−∞/∞、−∞/−∞
下列乘法运算:0×∞、0×−∞
下列加法运算:∞ + (−∞)、(−∞) + ∞
下列减法运算:∞ - ∞、(−∞) - (−∞)
3.产生复数结果的实数运算。
例:
对负数进行开偶次方的运算
对负数进行对数运算
对正弦或余弦到达域以外的数进行反正弦或反余弦运算

TypeOf检测结果汇总

数据类型检测结果值举例
numbernumber2
NaNnumberNaN
stringstring‘慕课网’
booleanbooleantrue
undefinedundefinedundefined
functionfunctionfunction(){}
nullobjectnull
objectobjectnew Object()
arrayobjectnew Array()

Typeof是操作符不是内置函数;
使用时,无需圆括号

console.log(typeof zhangmiao);//undefined
console.log(typeof 'zhangmiao');//string
console.log(typeof 123);//number
console.log(typeof '123');//string

数据类型转换

转换为数字

Number()属构造函数-无自动截取功能

1.字符串转化为数字,纯数字字符串能变为数字,不是纯数字的字符串将转为NaN

 Number('123');//123
 Number('123.4');//123.4
 Number('123年');//NaN
 Number('2e3');//2000
 Number('');//0
 Number(' ');//0,中间空格结果也是0

2.布尔值转化为数字

Number(true);//1
Number(false);//0

3.undefined和null转化为数字

Number(undefined);//NaN
Number(null);//0

parseInt()返回整数-有自动截取功能

解析一个字符串,并返回一个整数
1.若字符串不是以数字开头,则转为NaN
2.不进行四舍五入

parseInt('3.14'); //3
parseInt('3.14是圆周率'); //3 
parseInt('圆周率是3.14'); //NaN
parseInt('3.99'); //3,

parseFloat()返回浮点数-有自动截取功能

解析一个字符串,并返回一个浮点数
1.若字符串不是以数字开头,则转为NaN
2.不进行四舍五入

parseFloat('3.14'); //3.14
parseFloat('3.14是圆周率'); //3.14
parseFloat('圆周率是3.14'); //NaN
parseFloat('3.99'); //3.99

转化为字符串toString()

会变为“长得相同”的字符串
科学计数法和非10进制数字会转为10进制的值

转化为布尔值Boolean()

转为false的情况有以下,其他转化为true

  1. 0和NaN
  2. 空字符串
  3. undefined和null

应用:计算器

//1.用户输入两个数字(prompt(text,defaultText)接收到的内容是文本形式,需转换为数字)
 var a = Number(prompt('请输入第1个数字'));
 var b = Number(prompt('请输入第2个数字'));
 //2.计算两个数字的和
 var sum = a + b;
 //3.弹出结果
 alert(a + '+' + b + '的结果是' + sum);

意义:程序虽小,但体现了计算机程序普遍执行步骤:用户输入、计算机处理、显示结果

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值