原始数据
6种基本类型: string, number, boolean, null, undefined, symbol(es6)
string
1 | var str = "str"; |
dir1
1 === 1.0 // true
引用类型
引用类型通常叫做类(Class)
- Object
- 属性:
- constructor 对创建对象的函数的引用。对于Object对象,该指针指向原始的Object()函数
- Prototype 对该对象的对象原型的引用。
- hasOwnProperty(property)
- isPrototypeOf(obj) 判断该对象是否为另一个对象的原型
- PropertyIsEnumerable(property) 判断给定的属性是否为另一个对象的原型
- Oject.valueOf(); 返回对象的原始值
- 属性:
- Boolean 对象
- Number 对象
- toFixed(fixed)
- String 对象
- length
- charAt(index) 返回index位置字符
- charCodeAt(index) 返回index位置字符的ASCII码
- concat()
- indexOf()
- lastIndexOf()
- localeCompare()
1 | //如果 String 对象按照字母顺序排在参数中的字符串之前,返回负数。 |
类型转换(Boolean值、数字、和字符串的原始值)
ECMAScript的Boolean值、数字、和字符串的原始值的有趣的地方在于他们是伪对象。
转换成字符串
- toString() 将原始值转为字符串。
- Number.toString()
1 | var iNum1 = 10; |
转换成数字
- parseInt(原始值[,基值])
1 | var iNum1 = parseInt("12345red"); //返回 12345 |
- parseFloat(原始值[,基值])
1 | var fNum1 = parseFloat("12345red"); //返回 12345 |
隐式转换
转换规则(js中,不通类型之间进行四则运算的时候,常常会触发js的隐式类型转换机制)
- console.log() // 通常会将任何值转换成字符串然后展示
- 数学运算则会首先将值转化为数值类型
1 | // compare |
当js需要一个boolean值时,例如if( 表达式 ){},表达式的返回值会被强制转换为true或者false。
下面值会被转换为 false:
- undefined, null
- Boolean: false
- Number: -0,+0,NaN
- String:””
字符串的隐式转换
1 | var x = '5'; // 错误的假设:x 是一个数字 |
对象的隐式转换
- 调用 valueOf()。如果结果是原始值(不是一个对象),则将其转换为一个数字。
- 否则,调用 toString() 方法。如果结果是原始值,则将其转换为一个数字。
- 否则,抛出一个类型错误。
1 | 3 * { valueOf: function () { return 5 } } // 15 |
== 和 ===
typeof
1 |
|
new Function() 的实例为 Object 类型
1 | String.prototype.returnMe= function() { |
1 | //object coerced to primitive |
1 | if (new Boolean(false)) { |
基值不能assign值
var primitive = "september";
primitive.vowels = 3;
primitive.vowels; //undefined;
new Function() 创建的基值唯一的优势就是能assgin values,但是有一些其它方面的混淆。