面试必备知识点之数据类型与数据转换

ECMAScript语法 都会区分大小写

标识符:指的是变量,函数,属性的名字,或者函数的参数。标识符可以是按照下列的格式规则组合起来的一个或多个字符

  • 第一个字符必须是一个字母,下划线或者一个美元符号
  • 其他字符可以是字母,下划线,美元符号或者数字

标识符中的字母也可以包含扩展的ASCII或Unicode字母字符,ECMAScript标识符建议采用驼峰命名法

数据类型

ECMAScript中有六种简单数据类型(也称为基本数据类型):Undefined,Null,Boolean,Number,String,Symbol(ES6)。 一种复杂数据类型Object,Object本质是由一组无序的键值对组成的。

typeof操作符

  • “undefined” ——-如果这个值未定义
  • “boolean”————-如果这个值是布尔值
  • “string”—————字符串
  • “number”————数值
  • “object”————-如果这个值是对象或者是null
  • “function”————函数
  1. typeof null //"object"
  2. typeof /\2/ //"object"

解释以上代码:由于null是被认为是一个空的对象引用值,所以输出的是object 正则表达式也会变成object

Undefined类型

它只有一个值,即特殊的undefined。在使用 var 声明变量但未对其加以初始化时,这个变量的值就是undefined

  1. var message
  2. message == undefined//ture
  3. var message = undefined
  4. message == undefined//true
  5. console.log(age) //Uncaught ReferenceError: age is not defined:没有声明age它会抛出错误
  6. var age
  7. console.log(age)//undefined
  8. typeof age1//"undefined":对于未声明的变量typeof它也会返回"undefined"

未经初始化默认的值就会取得undefined值,第三版引入该值是为了正式区分空对象的指针与未经初始化的变量

Null类型

null 类型是第二个只有一个值的数据类型,这个特殊的值是 null 。从逻辑角度来看,null值表示一个空对象指针,而这也正是使用 typeof 操作符检测null值时会返回”object”原因。

如果定义的变量准备在将来用于保存对象,那么最好将该变量初始化为null。随后只用检查null值就可以知道相应的变量是否已经保存了一个对象的引用

  1. if(car ! = null){
  2. //对car对象做工作
  3. }

实际上undefined值是派生自null值的。

  1. null == undefined//true
  2. null === undefined//false
  3. null === {}//false
  4. null == {} //false

Boolean类型

类型 Boolean()转换为true Boolean()转换为false
String 任何非空字符串 “”空字符串
Number 任何非零数字值(包括无穷大) 0和NaN
Object 任何对象 null
Undefined undefined

Number类型

  1. Number.MAX_VALUE
  2. //1.7976931348623157e+308
  3. Number.MIN_VALUE
  4. //5e-324
  5. //狠起来连自己都不相等的NaN(NOt a Number)
  6. NaN == NaN //false
  7. isNaN(NaN)//true
  8. isNaN(10)//false
  9. isNaN("10")//false,isNaN会把"10"转换为10
  10. isNaN("blue")//true
  11. isNaN(true)//false(可以转化为数字1)

数值转换

有三个函数可以把非数值转换为数值:Number(),parseInt()和parseFloat()。第一个函数,即转型函数Number() 可以用于任何数据类型,而另两个函数则专门用于把字符串转换成数值。
Number():

  • 如果是布尔值,true->1,false->0
  • 如果是数字值,只是简单的传入和返回
  • 如果是null值,返回0
  • 如果是undefined,返回NaN
  • 如果是字符串,遵循下列规则:
  1. 如果字符串中值包含数字(包括前面带正号或者带负号的情况),则将其转换为十进制数值,即 Number("1")//1 Number("01")//1
  2. 如果字符串中包含有效的浮点形式,eg “1.1”,将其转换为相同大小的十进制整数值
  3. 如果字符串中包含有效的十六进制格式,例“0xf”会转换成十进制数值
  4. 如果字符串是空的,则将其转换为0
  5. 如果字符串包含初上述格式之外的字符,则将其转换为 NaN
  • 如果是对象,则调用对象的 valueOf() ,如果返回的是NaN,则使用toString()
  1. var obj = {a:1}
  2. obj.valueOf()//{a: 1}
  3. parseInt("124blue")//124
  4. parseInt("")//NaN
  5. parseInt("22.5")//22
  6. parseInt("0xAF",16)//175:表示当前的0xAF是十六进制表示
  7. parseInt("AF",16)//175:这样写也可以不要0x
  8. parseFloat("0xA")//
  9. parseFloat("22.5")//22.5

String类型

转换字符串:

  1. var age = 11
  2. age.toString()//"11"

toString() 方法是无法将null和undefined转换为字符串的,但是使用 String() 函数可以将所有的值转换为字符串

  1. var a = null
  2. String(a)//"null"
  3. var b = undefined
  4. String(b)//"undefined"

Object类型

  1. var obj = new Object()

需要理解一个重要的思想是: 在ECMAScript中,Object类型是所有它的实例的基础。换句话说,Object类型所有具有的任何属性和方法也同样存在与更具体的对象中。

Object的每个实例都具有下列的属性和方法:

  • constructor:保存着用于创建当前对象的函数。
  • hasOwnProperty(propertyName):用于检查给定属性在当前对象实例中(而不是在原型实例中)是否存在。其中,作为参数的属性名(propertyName):必须以字符串形式指定
  • isPrototypeOf(object):用于检查传入的对象是否是当前对象的原型
  • propertyIsEnumerable(propertyName):用于检查给定的属性是否能够用 for-in 语句来枚举。与hasOwnProperty()方法一样需要传入字符串
  • toLocaleString():返回对象的字符串表示,该字符串与执行环境的地区对应
  • toString():返回对象的字符串表示
  • valueOf():返回对象的字符串,数值或布尔值表示。通常与toString()方法返回值相同

== 和 === 的区别

=== 叫做全等操作符
== 叫做相等操作符

  1. "55" == 55//true:转换数值后相等:()
  2. "55" === 55//false:数值类型不相等

对上面代码的解释:

  • 第一个 == 使用的是相等操作符比较字符串”55”和 55时,会将可以转换的”55”转换为55再进行比较

    ,最后会返回true.

  • 第二个 === 不会对数据进行转换处理再进行比较,所以会返回false

  1. null == undefined//ture
  2. null === undefined//false

最后函数类型:可以向ECMAScript函数传递任意数量的参数,并且可以通过arguments对象来访问这些参数
arguments是一个类数组类型,它可以使用arguments[0]这样的方式来访问传入函数的参数
然后js语法中的函数不接受重载,有同样名字的函数,后面声明的会覆盖前面声明的。