原始类型共5种
- string | number | boolean | undefined | null
内建引用类型共5种
- Date | Error | Function | Object | RegExp
数组的动态方法
var arr = [1,2,3];
arr["push"](5);
console.log(arr);
判断数组的最佳方法
- Array.isArray(),node环境也支持
正则表达式的转义
- 如果需要通过变量构造表达式,则使用构造函数(注意,需要对任何反斜杠进行转义)
- 如果不需要动态构造表达式,则使用字面量
var nums = /\d+/g;
var nums = new RegExp("\\d+","g");
理解引用类型,堆内存和栈内存
- 栈内存中保存了变量标识符和指向堆内存中该对象的指针
- 堆内存中保存了对象的内容
判断对象为空
- 最佳办法是直接和null对比( val===null )
- 因为 typeof null === “object”,这一设计被官方认为是一个错误
主动解除对象引用
- 注意,引用类型变量标识符和原始类型一样,存放在栈内存中
- 最佳方式是将对象变量置为 null,以释放内存
- 在大型程序中,主动解除十分重要
原始类型不是真正的对象
- 尽管,原始类型拥有方法,看上去像对象一样(指Object类型)
- 实际上,这只是js在语言一致性上,所做的封装
- 实际上,包装类型数据,才是真正的对象
var str1 = "abc";
var str2 = new String("abc");
str1.color = "red"
str2.color = "red"
console.log(str1.color);
console.log(str2.color);
console.log(str1);
console.log(str2.color);
引用类型传值陷阱
function A(){return 5};
var book = {
name:"english",
price:100,
};
var obj = {
name:"zk",
fun:A,
book:book,
};
obj.fun();
function A(){return 6};
obj.fun();
book.price = 999;
obj.book.price;