本身总结一下javascript的基础知识,但愿对你们有用,也但愿你们来拍砖,毕竟是我的的理解啊javascript
string
)var num = 123; console.log(typeof num); //
做用:判断指定属性是否存在于指定的对象中。 若是指定的属性存在于指定的对象中,则 in 运算符会返回 true。 语法: 属性 in 对象 返回值:true 或者 false 示例: var obj = { age: 18 }; var hasAge = "age" in obj; console.log(hasAge); //
1 in 2 浏览器能力检测
值类型:变量中存储的是数值自己 引用类型:变量中存储的是数据的引用(地址) 对象中的属性能够是值类型也能够是引用类型
var o = new Object(); function foo(obj) { obj.name = "腐女"; obj = new Object(); obj.name = "屌丝"; } foo(o); console.log(o.name); //
|| 若是第一个为真 就返回第一个表达式, 若是为假 则返回第二个表达式 && 若是第一个为假 就返回第一个表达式, 若是为真则返回第二个表达式
function fn(num) { // 若是传入num,就打印num的值 // 若是没有传入 就打印 没有参数 }
做用:删除一个对象的属性。 语法:delete 属性名 返回值: true 或 false 用法: 1 删除数组中的元素 2 删除对象的属性或方法 3 删除没有用 var 声明 变量
// 语法:
try { // 可能出现错误的代码 } catch ( e ) { // 出现错误会执行这里的代码 } finally { // 可选 // 不管是否出现异常, 最后执行 } // 手动抛出异常 throw new Error("别瞎搞"); throw "这都行???";
// 函数声明
function foo() {} // 函数表达式 var foo = function foo() {}; // 不推荐这么作!! if(true) { function f() { console.log(true); } } f();
表达式:(有值) 表达式(expression)是JavaScript中的一个短语,JavaScript解释器会将其计算出一个值。 表达式能够是:数据 或者 数据和运算符的组合 例如:一、"abc"、true、1 + 二、i++、a === b ? a : b 、a = 1 语句:(带分号) 语句是JavaScript的句子或命令,以分号结束。 var a = 1;
// jQuery
$("body").append("<p>jQuery建立节点就是如此潇洒</p>"); // js var p = document.createElement("p"); var txt = document.createTextNode("creat E..,creat T..真麻烦"); p.appendChild(txt); document.body.appendChild(p);
面向过程:全部的细节、步骤、过程,要一步一步亲历亲为(执行者) 面向对象:找到能完成这个事情的对象,让它帮你完成就行(调度者) 生活中的例子: 作饭(叫外卖) 开公司
问题:面向对象这么好,面向过程就没用了?面向对象是对面向过程的一个封装css
案例:给div和p添加红色边框java
// 经过标签名获取元素
function tag(tagStr) { return document.getElementsByTagName(tagStr); } var divs = tag("div"); for(var i = 0; i < divs.length; i++) { divs[i].style.border = "1px dotted red"; } var ps = tag("p"); for(var i = 0; i < ps.length; i++) { ps[i].style.border = "1px dotted red"; }
// 使用对象
var itcast = { id: function(idStr) { return document.getElementById(idStr); }, tag: function(tagStr) { return document.getElementsByTagName(tagStr); } };
var itcast = { // 元素获取模块 getElem: { tag: function() {}, id: function() {} }, // 样式模块 css: { addStyle: function() {}, removeStyle: function() {}, hasStyle: function() {} } };
getElementById getElementsByTagName getElementsByClassName
appendChild insertBefore removeChild replaceChild cloneNode createElement createTextNode(建立文本节点)
getAttribute setAttribute removeAttribute
className innerHTML innerText/textContent value children
在DOM中全部的东西所有都是对象,因此,使用DOM很是简单方便 jQuery中全部的东西也都是对象
// json 的表示法, 对象的直接量(字面量)
var p = { name: "jim", age: 19, sex: "男", sayHello: function() { alert("你好,哈哈哈哈"); } }; p.sayHello(); // 此时能够把对象称为:关联数组 p["sayHello"]();
例如: 描述一个商品 Goods(name, price, img, count, pDate) 假若有 100 件
var Person = function() { this.name = "jim"; this.age = 19; this.gender = "男"; this.sayHello = function() { alert("你好,哈哈哈哈"); }; }; // 建立对象(构造函数Person的对象) var p = new Person(); // 访问对象的 属性 console.log(p.name); // 访问对象的 方法 p.sayHello();
写一个学生 Student, 要求有 姓名性别年龄和课程分数(语文, 数学, 英语)和说话的方法
// 不使用函数
var area = 10 * 10 / 2; // 封装成函数 function getArea() { var area = 10 * 10 / 2; return area; } // 改进 function getArea(bottom, height) { return bottom * height / 2; } getArea(10, 20);
4 函数调用时不传入参数,则函数内部获取参数的值为:undefinedweb
练习:写一个函数打印一段文字,要求:传入什么内容,就打印什么内容面试
形参(形式参数),即函数定义时的参数,只起到占位的做用,等到函数被调用的时候,会被传入的具体值代替。【联想数学公式】 s = d * h / 2; 实参(实际参数),即函数被调用时的参数,是一个具体的值或者表达式(一、"老司机"、true、[2, 2]、{ name: "two"} 等)
构造函数中的属性和方法,会在调用的时候被处理,即会消耗内存。 new 出来的对象,都是一个单独副本 new 一个对象就占用一分内存,new 多少对象就占用多少分内存。 可是对于构造函数中的方法来讲,每一个对象的方法都是相同的(或者说应该是被共享的)
对于典型的淘宝商品详情页,经测试发现,每增长一个 DOM 节点,会致使首屏渲染时间延迟约 0.5msexpress
function Person() {} // prototype 即 原型 Person.prototype.legs = 2; var p = new Person(); console.log(p.legs);
在访问对象的某一个属性 (方法)的时候: 1 首先会在当前对象中查找有没有该属性 2 若是当前对象没有, 就会在构造方法的定义规则中查找(当前对象) 3 若是没有, 就会到与对象联系起来的 构造函数的 prototype 属性的值中找
// 对象会到 与它联系的 prototype 中找数据
// 能够考虑将共享的数据, 放到 里面 function Person(name) { this.name = name; } Person.prototype.sayHello = function() { alert(this.name); }; var p = new Person(); p.sayHello();
获取操做: 遵循属性查找原则 赋值操做(只与当前对象有关): 只会操做对象自己,若是对象中没有该属性则建立该属性,并赋值;若是对象中有,则修改
__proto__
__proto__
是非标准属性对象中有一个属性 叫 __proto__ 对象的 __proto__ 与建立它的构造函数的 prototype 是一个东西
function F() {} var o = new F(); console.log(o.__proto__ === F.prototype);
F.prototype 原型属性 f.__proto__ 原型对象 F.prototype 是 构造函数F的 原型属性 f.__proto__ 是 对象f的 原型对象