重学前端-js的类型问题

JavaScript的语言类型:

  • undeifined
  • boolean
  • string
  • number
  • null
  • symbol
  • object
记住:
0.1 + 0.2 != 0.3
复制代码
1.undefined
undeifined 是一个变量,而非是一个关键字。
而获取他的值,则可以通过void 0 来获得。


void 0 == undefined
任何变量在赋值前都是undefined。

而null是定义了但是为空的状态。
复制代码
2.null
null类型只有一个值,就是null,他的语义表示空值。
null不同于undefined,null是关键字,所以你可以放心用null关键字来获取null值。
复制代码
3.Boolean
Boolean类型会有两个值,truefalse。
是用来判断逻辑意义上的真假。
复制代码
4.String
 string用于表示文本数据,string有最大长度:2^53-1.
 
 string的意义并非字符串,而是字符串的UTF16编码
复制代码
5.number
number是浮点数,console.log( 0.1+0.2 == 0.3); //false

其实。浮点数运算的特点,精度问题

复制代码
6.symbol
symbol 是ES6引入的新类型,是一切非字符串的对象key的集合。

ES6中整个对象系统被Symbol重塑。

创建:(使用全局的symbol函数)

var mysymbol = Symbol("my symbol")

Symbol.iterator---为每一个对象定义了默认的迭代器,该迭代器可以被for...of循环调用


var o = new Object

//给对象Object添加iterator属性
o[Symbol.iterator] = function() {
    var v = 0;
    return {
        next:function(){
            return {value: v++, done: v> 10}
        }
    }
}

for(var v of o)  console.log(v)

复制代码
7.对象
Object是最复杂的类型,也是js的核心机制之一。

对象是属性的集合,属性分为:数据属性和访问器属性,都是KEY-VALUE形式。key可以是字符串或者symbol类型
复制代码
类型转换

StringToNumber

NumberToString

装箱转换

    是把基本类型转换成为对应的对象。
    
    
    例子:
    symbol对象是无法使用new来调用的,但是我们可以利用装箱机制来得到一个symbol对象。
    
    利用一个函数call来强迫产生装箱。
    
    var symbolObject = ( function () {
        return this;
    }).call(Symbol("a"))
    
    console.log(symbolObject instanceof Symbol); //true
    console.log(typeof symbolObject) // object
    
    
    或者利用Object函数,在JavaScript代码中显式调用装箱能力
    
    var symbolObject = Object((Symbol('a'));
    console.log(Object.ptototype.toString.call(symbolObject)); // [Object Symbol]
复制代码
拆箱转换: ToPrimitive函数
    是对象类型到基本类型的转化。
    对象到String和Number的转换都遵循“先拆箱再转换”。先将对象转为基本类型,再从基本类型转化成String和NUmber
    
    var o = {
        valueOf: () => { console.log("valueOf"); return {}}
        toString: () => { console.log("toString"); return {}}
    }
    
    o*2
    
    //1.先执行valueOf
    //2.toString
    //3.typeError
    
    o + ""
    
    //1.先执行toString
    //2.tvalueOf
    //3.typeError
    
    显式toPrimitive Symbol 来覆盖原有的行为
    
    o[Symbol.toPrimitive] = () => {console.log("toPrimitive"); return "hello"}
    
    console,log(o + "")
复制代码

js字符串和数字之间的转换

1.转换函数

parseInt("10.5") // 10
parseInt("0xA") //10

parseFloat("1234blue") // 1234
parseFloat("blue") //NaN

复制代码

2.强制类型转换

Boolean(value) --- 把给定的值转换成Boolean型
Number(value) --- 把给定的值转化为数字(整数或者式浮点数)
String(value) -- 把给定的值转为字符串

Boolean(100) // true
Number(false) //0
Number(true) //1
复制代码

3.利用JS变量弱类型转换

var string = 1 + '12' // 112 string
string = string - 0 // 112 number
复制代码

转载于:https://juejin.im/post/5c4d6ec0e51d45520d30173a

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值