typeof 返回的数据类型 及 javascript数据类型中的一些小知识点

typeof 共返回6种数据格式:

1、object 

2、undefined

3、string

4、number

5、boolean

6、function

特别注意 typeof [ ] 和 typeof null 返回的都是object ,typeof 对于原始类型来说,除了 null 都可以显示正确的类型

typeof(Object)和typeof(Array)的结果是function,因为Object和Array本身就是内置函数。

 

javascript中的数据类型:

ECMAScript 中包含两种不同数据类型的值:基本类型值 和 引用类型值基本类型值就是简单的 数据段,而 引用类型值 指那些可能由多个值构成的 对象

基本数据类型UndefinedNullBooleanNumber、和 String、symbol(symbol是ES6中新增的数据类型)

  按值访问的,因为可以操作保存在变量中的实际的值。

  首先原始类型存储的都是值,是没有函数可以调用的,比如 undefined.toString(),但 '1'.toString() 是可以使用的。其实在这种情况下,'1' 已经不是原始类型了,而是被强制转换成了 String 类型也就是对象类型,所以可以调用 toString 函数。

引用数据(对象)类型Object,array,function ( 基本上所有的对象最终都是继承于Object(null和undefined没有原型对象),)

  对象类型和原始类型不同的是,原始类型存储的是值,对象类型存储的是地址(指针)。当你创建了一个对象类型的时候,计算机会在内存中帮我们开辟一个空间来存放值,但是我们需要找到这个空间,这个空间会拥有一个地址(指针)。

  我们来看个例子:

function test(person) {
person.age = 26
person = {
name: 'yyy',
age: 30
}

return person
}
const p1 = {
name: 'yck',
age: 25
}
const p2 = test(p1)
console.log(p1) // {name:'yck',age:26}
console.log(p2) //  {name:'yyy',age:30}

  • 首先,函数传参是传递对象指针的副本
  • 到函数内部修改参数的属性这步,我相信大家都知道,当前 p1 的值也被修改了
  • 但是当我们重新为 person 分配了一个对象时就出现了分歧

 所以最后 person 拥有了一个新的地址(指针),也就和 p1 没有任何关系了,导致了最终两个变量的值是不相同的。

javascript数据类型中的一些小知识点:

1.0.1 + 0.2 = 0.3?

在JS中,0.1+0.2是不等于0.3的,因为0.1在计算机中用二进制表示的话,会产生无限循环位数。类似于十进制中,三分之一就是无限循环小数。

所以对这些循环小数进行数学运算时,并将二进制数据再转换成十进制时,也还是无线循环小数,对末尾进行截取后,得到的值就是0.30000000000000004

正确的比较方法是使用JS提供的最小精度值,检查等式左右两边差的绝对值是否小于最小精度:

Math.abs(0.1 + 0.2 - 0.3) <= Number.EPSILON   (true)

2. 666 和 new Number(666)的区别

123 是一个number类型的数字,而Number(123)是一个对象类型的数据。

‘HELLO'.charAt(1) ==》 'E'

点(.)运算符提供了装箱操作,会根据一个基础类型构造一个临时对象,所以能在基础类型上调用对应对象的方法

3. parseInt 和 parseFloat

parseInt(string, radix)-------将字符串转换成整型类型数字

parseInt 会忽略字符串前面的空格,直到找到第一个非空格字符,如果第一个字符是数字字符会继续解析第二个字符,直到遇到非数字字符停止,如果第一个不是数字字符,该方法将返回NaN,不再继续执行其他操作。

 parseInt可以识别各种整数格式,如:8进制,10进制,16进制,所以可以接收第二个参数表示要转换为多少进制

parseFloat -------将字符串转换成浮点类型的数字

  与parseInt()方法的处理方式相似,从位置0开始查看每个字符,直到找到第一个非有效的字符为止,然后把该字 符之前的字符串转换成数字。
不过,对于这个方法来说,第一个出现的小数点是有效字符。如果有两个小数点,第二个小数点将被看作无效的, parseFloat
()方法会把这个小数点之前的字符串转换成数字。这意味着字符串 "22.34.5 "将被解析成22.34。
使用parseFloat()方法的另一不同之处在于,字符串必须以十进制形式表示浮点数,而不能用八进制形式或十六进制形式。

 4. 类型转换

 

https://www.cnblogs.com/freefy/p/9440214.html

posted on 2019-09-16 22:43  半分可爱与温柔啊  阅读(637)  评论(0编辑  收藏  举报

导航