js 杂六笔记
- typeof []; // “object”
typeof null; // “object” 由于历史原因 兼容以前代码
undefined, null, false, 0, NaN, ” ” // 会自动转化为布尔值 false
var a = 1 AND a = 1 的区别
a = 1 相对于声明了全局变量, 可用delete a删除属性。 相对于给 window[“a”] = 1 , 给window对象添加了a属性
- js中的+运算符比较特殊 当 + 的一边有字符串的时候 会进行字符串的连接
` “5” + 11 // “511”
“5” - 11 // -6
- 防止空字符串 0 这些参数 传入函数时, 都会默认没有传入
// 参数a可以识别出 0 或者 空字符串 这些参数 function f(a) { (a !== undefined && a !== null) ? (a = a) : (a = 1); // dosomething return a; }
+ instanceof
1. instanceof 首先检查右边是不是构造函数 如果是 就进行下一步
2. 若左边的原型链上有某个proto 和右边的构造函数的prototype属性相等,就返回true
var a = [], b = {};
a instanceof Array; // false
b instanceof Array; // true
- js中参数有两个方式 一种是传值传递(只是值的拷贝) 一种是传地址传递
var p = 2;
function f(p) { // 传入的参数只是值的拷贝
p = 3; // 函数内部改变的值无法改变外部的值
}
p; // 2
- try-catch 语句中需要注意的问题
var count = 0;
function countUp() {
try {
return count;
} finally { // 不管是否有返回值 一定会执行finally中的语句
count++;
}
}
countUp();
count; // 1
在js的引擎中
{} // 会被解析为一个代码块 ({}) // 这样才会被解析为一个对象
圆括号运算符的运用
(表达式) // 求值
函数() 调用函数
对象中 toString 和 valueOf 的区别
var o = new Object(); o.valueOf = function() { return {}; }; o.toString = function() { return "22"; }; o + 1; // "221"
上面发生的原因是对象是首先调用valueOf方法,如果其返回的不是基本原始类型,就会继续调用toString方法 但是如果两个方法返回都不是基本类型,系统会报错。 也会出现人为没有定义valueOf和toString方法 比如
var o = new Object(); o + 1; // "[object object]"+1
系统会返回该元素的类型
构造函数中
如果构造函数的return语句返回的是对象,则返; 如果不是,则返回构造后的上下文对象var Car = function() { this.name = "BMW"; return 1000; }; Car(); // 1000 typeof Car(); // "number" typeof new Car(); // "object"
js对象中 Object.create()
接受一个原型对象作为参数, 返回一个新对象,后者继承前者的属性if(typeof Object.create !== "function") { Object.create = function(obj) { Function F() {}; F.prototype = obj; return new F(); // 返回F的实例 }; }