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类型会有两个值,true和false。
是用来判断逻辑意义上的真假。
复制代码
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
复制代码