面试必备知识点之数据类型与数据转换
ECMAScript语法 都会区分大小写
标识符:指的是变量,函数,属性的名字,或者函数的参数。标识符可以是按照下列的格式规则组合起来的一个或多个字符
- 第一个字符必须是一个字母,下划线或者一个美元符号
- 其他字符可以是字母,下划线,美元符号或者数字
标识符中的字母也可以包含扩展的ASCII或Unicode字母字符,ECMAScript标识符建议采用驼峰命名法
数据类型
ECMAScript中有六种简单数据类型(也称为基本数据类型):Undefined,Null,Boolean,Number,String,Symbol(ES6)。 一种复杂数据类型Object,Object本质是由一组无序的键值对组成的。
typeof操作符
- “undefined” ——-如果这个值未定义
- “boolean”————-如果这个值是布尔值
- “string”—————字符串
- “number”————数值
- “object”————-如果这个值是对象或者是null
- “function”————函数
typeof null //"object"
typeof /\2/ //"object"
解释以上代码:由于null是被认为是一个空的对象引用值,所以输出的是object 正则表达式也会变成object
Undefined类型
它只有一个值,即特殊的undefined。在使用 var
声明变量但未对其加以初始化时,这个变量的值就是undefined
var message
message == undefined//ture
var message = undefined
message == undefined//true
console.log(age) //Uncaught ReferenceError: age is not defined:没有声明age它会抛出错误
var age
console.log(age)//undefined
typeof age1//"undefined":对于未声明的变量typeof它也会返回"undefined"
未经初始化默认的值就会取得undefined值,第三版引入该值是为了正式区分空对象的指针与未经初始化的变量
Null类型
null
类型是第二个只有一个值的数据类型,这个特殊的值是 null
。从逻辑角度来看,null值表示一个空对象指针,而这也正是使用 typeof
操作符检测null值时会返回”object”原因。
如果定义的变量准备在将来用于保存对象,那么最好将该变量初始化为null。随后只用检查null值就可以知道相应的变量是否已经保存了一个对象的引用
if(car ! = null){
//对car对象做工作
}
实际上undefined值是派生自null值的。
null == undefined//true
null === undefined//false
null === {}//false
null == {} //false
Boolean类型
类型 | Boolean()转换为true | Boolean()转换为false |
---|---|---|
String | 任何非空字符串 | “”空字符串 |
Number | 任何非零数字值(包括无穷大) | 0和NaN |
Object | 任何对象 | null |
Undefined | undefined |
Number类型
Number.MAX_VALUE
//1.7976931348623157e+308
Number.MIN_VALUE
//5e-324
//狠起来连自己都不相等的NaN(NOt a Number)
NaN == NaN //false
isNaN(NaN)//true
isNaN(10)//false
isNaN("10")//false,isNaN会把"10"转换为10
isNaN("blue")//true
isNaN(true)//false(可以转化为数字1)
数值转换
有三个函数可以把非数值转换为数值:Number(),parseInt()和parseFloat()。第一个函数,即转型函数Number() 可以用于任何数据类型,而另两个函数则专门用于把字符串转换成数值。
Number():
- 如果是布尔值,true->1,false->0
- 如果是数字值,只是简单的传入和返回
- 如果是null值,返回0
- 如果是undefined,返回NaN
- 如果是字符串,遵循下列规则:
- 如果字符串中值包含数字(包括前面带正号或者带负号的情况),则将其转换为十进制数值,即
Number("1")//1
Number("01")//1
- 如果字符串中包含有效的浮点形式,eg “1.1”,将其转换为相同大小的十进制整数值
- 如果字符串中包含有效的十六进制格式,例“0xf”会转换成十进制数值
- 如果字符串是空的,则将其转换为0
- 如果字符串包含初上述格式之外的字符,则将其转换为 NaN
- 如果是对象,则调用对象的
valueOf()
,如果返回的是NaN,则使用toString()
var obj = {a:1}
obj.valueOf()//{a: 1}
parseInt("124blue")//124
parseInt("")//NaN
parseInt("22.5")//22
parseInt("0xAF",16)//175:表示当前的0xAF是十六进制表示
parseInt("AF",16)//175:这样写也可以不要0x
parseFloat("0xA")//
parseFloat("22.5")//22.5
String类型
转换字符串:
var age = 11
age.toString()//"11"
toString()
方法是无法将null和undefined转换为字符串的,但是使用 String()
函数可以将所有的值转换为字符串
var a = null
String(a)//"null"
var b = undefined
String(b)//"undefined"
Object类型
var obj = new Object()
需要理解一个重要的思想是: 在ECMAScript中,Object类型是所有它的实例的基础。换句话说,Object类型所有具有的任何属性和方法也同样存在与更具体的对象中。
Object的每个实例都具有下列的属性和方法:
- constructor:保存着用于创建当前对象的函数。
- hasOwnProperty(propertyName):用于检查给定属性在当前对象实例中(而不是在原型实例中)是否存在。其中,作为参数的属性名(propertyName):必须以字符串形式指定
- isPrototypeOf(object):用于检查传入的对象是否是当前对象的原型
- propertyIsEnumerable(propertyName):用于检查给定的属性是否能够用
for-in
语句来枚举。与hasOwnProperty()方法一样需要传入字符串 - toLocaleString():返回对象的字符串表示,该字符串与执行环境的地区对应
- toString():返回对象的字符串表示
- valueOf():返回对象的字符串,数值或布尔值表示。通常与toString()方法返回值相同
== 和 === 的区别
===
叫做全等操作符==
叫做相等操作符
"55" == 55//true:转换数值后相等:()
"55" === 55//false:数值类型不相等
对上面代码的解释:
第一个
==
使用的是相等操作符比较字符串”55”和 55时,会将可以转换的”55”转换为55再进行比较,最后会返回true.
第二个
===
不会对数据进行转换处理再进行比较,所以会返回false
null == undefined//ture
null === undefined//false
最后函数类型:可以向ECMAScript函数传递任意数量的参数,并且可以通过arguments对象来访问这些参数
arguments是一个类数组类型,它可以使用arguments[0]这样的方式来访问传入函数的参数
然后js语法中的函数不接受重载,有同样名字的函数,后面声明的会覆盖前面声明的。