JS基础拾遗 - 2 - 变量

变量类型

6种基本类型变量(简单类型变量)

number
string
boolean
undefined
null
symbol (ES6 新增)

一种引用类型变量 (复杂类型变量)

object

typeof 操作符

typeof 操作符返回的值是字符串(完全小写)

typeof 操作符的返回值

typeof null === “object”

历史遗留问题,可以认为是一个老bug

typeof ()=>{} === “function”

可以借此区分 function 和其他对象

typeof NaN === “number”

NaN不是一种类型,也未被特殊处理

typeof 未声明变量 === “undefined”

对于没有声明的变量,只有 typeof 操作和 delete 操作是合法的
(严格模式下,delete一个不存在的变量也会报错)
typeof 对于没有声明的变量 和 声明但没有初始化的变量 都返回"undefined",为了避免混淆这两种情况,尽量在声明变量的同时进行初始化,这样出现"undefined"就可以肯定该变量没有被声明。

let 和 const 的出现解决了这一问题。

类型细节

Boolean

转型函数 Boolean()
数据类型转换成true转换成false
String非空字符串“”(空字符串)
Number任何非零数值(包括Infinity)0 和 NaN
Object任何对象不存在
Null不存在null
Undefined不存在undefined

流程控制语句,比如if、while,会在()内自动执行Boolean()转型函数。

Number

整型数值

只需要注意:八进制以0打头,十六进制以0x打头;八进制在严格模式下无效

浮点数值

当数值中包含一个小数点,且小数点后至少有一个数字,这个数值就是一个
浮点数值。

  1. e表示法
    浮点数值支持e表示法:3.125e7
  2. 存在舍入误差(通病)
    计算精确度的问题导致了舍入误差,比如 0.1 + 0.2 不等于 0.3
Infinity

若一个值 < Number.MIN_VALUE,或 > Number.MAX_VALUE 时,
(比如 正数、负数 / 0)
会被自动转换成 Infinity (有正负),它不能参与运算

可以用 isFinite() 进行判断,不超过大小限制的数值会返回 true。
NaN

Not a Number,比如,0除以0就会返回NaN。
两个特点:

  1. 任何涉及 NaN 的运算都会返回 NaN
  2. NaN 与任何值都不相等,包括NaN本身。
可以用 isNaN() 进行判断

isNaN() 会使用 Number() 进行转换,不能转换成数值就会返回false

转型函数 Number()
数据类型和转换规则
  1. Boolean
    true返回1,false返回0
  2. String
    字符串中只包含数字(包括0x打头的十六进制格式、浮点数),忽略前导0,转换十进制数值;
    空字符串返回 0;
    包含其他任何字符,都转换成 NaN
  3. undefined
    返回 NaN;
    (这点是经常被遗忘的,但是比较重要)
  4. null
    返回 0;
  5. object
    先调用valueOf(),若转换成NaN,再调用toString(),再按上述规则进行转换;
parseInt() 和 parseFloat()

Number() 对字符串的转换不够合理,parseInt() 和 parseFloat() 解决的是字符串转
换成数值的问题。JS中带有"parse"的函数,大都有解析字符串的功能。

parseInt()
parseInt(string, number)
  1. 忽略字符串前的空格,直到找到第一个非空格字符
  2. 若这第一个字符不是数字或者负号,返回 NaN
    直到遇到非数字字符,或者解析完成为止。
    parseInt()本身能够根据格式识别出各种进制的正数,但是为了解决类似上述八进制
    的问题,它提供了第二个参数,用于指定以什么进制来解析,即把这个要解析的字符
    串当做什么进制的数来看。
    通常会以10作为第二个参数。

举例:

  1. 对于空字符串,Number() 返回 0,而 parseInt() 返回 NaN;
  2. 对于 " 70",Number() 返回 NaN,parseInt() 返回 70;
  3. 对于 “70abc”,Number() 返回 NaN,parseInt() 返回 70。
parseFloat()

用法与 parseInt() 类似,区别在于对浮点数模式(小数点、e表示法)的处理。

String

String.length

返回字符串的长度。若存在双字节字符,可能不精确。

字符串不可变

JS中的字符串是不可变的,比如对原字符串做拼接、修改等操作,本质上都会
返回一个新的字符串,这个过程是在后台发生的。

toString()

除了null和undefined外的值都具有toString()方法,返回结果都是在值的两边加上引号,成为一个字符串。
数值的toString()可以传入参数,用于指定转换成什么进制的格式:

let num = 10;
num.toString(2);  //"1010"
转型函数 String()

null 和 undefined 没有 toString() 方法,String() 函数能够实现对这些值的转换,
null -> “null”,
undefined -> “undefined”,
其他值的处理结果,和toString()方法不传参的情况相同。

Object

个中概念不做解释,因为拾遗的前提是对基础有整体的了解。
以下是一些Object实例的属性与方法:

  • constructor
    指向实例的构造函数
  • hasOwnProperty(propertyName)
    判断“该属性是否存在于该对象实例(而不是原型链)中?”
  • isPrototypeOf(object)
    判断“是object的原型吗?”
  • propertyIsEnumerable(propertyName)
    判断“该属性可枚举吗?”
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值