前端手艺人 一个前端菜鸟的自嘲

Js杂六笔记

记录着我一路学习js以来, 遇到的js问题, 我踩过的坑, 记录下来, 防止重复踩坑.... </div + 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的实例 }; }