#document.write();
#document.getElementById("id ").innerHTML = "重写"
<script>
document.write("Hello");
</script>
运算符 | 内容 |
---|---|
算术运算符 | + - * % / ++ -- |
赋值运算符 | = += -= *= /= %= |
*字符串操作 | |
比较运算符 | == === != !== > < >= <= |
逻辑运算符 | && 两竖 ! |
条件运算符 | 三元符号 |
条件语句 | 循环语句 | 跳转语句 |
---|---|---|
if-else | for循环: for/in | break |
switch | while循环:do...while | continue |
switch(i){
case 1:
输出语句1
break;
case 2:
输出语句2
break;
default: //当条件不满足任何一个case
break;
}
do{
执行语句
}while(i<10){
//与while的区别是先执行一次再判断
}
函数执行:
//<script>标签中调用
//html中调用
try{ //发生异常的代码块
}catch(err){ //错误信息处理
}
事件 | 描述 |
---|---|
onClick | 单击事件 |
onMouseOver | 鼠标经过事件 |
onMouseOut | 鼠标移出事件 |
onChange | 文本内容改变事件 |
onSelect | 文本框选中事件 |
onFouse | 光标聚集事件 |
onBlur | 移开光标事件 |
onLoad | 网页加载 |
onUnload | 关闭网页的事件 |
当网页被加载时,浏览器会创建页面的文档对象模型 Document Object Model == HTML DOM
#1.改变HTML的输出流:绝对不要在文档加载完之后使用document.write(),会覆盖该文档
#2.寻找元素(id 或标签名). #3.改变HTML内容 使用:innerHTML #4改变HTML的属性 使用:attribute
document.getElementById(id).attribute=new attribute
document.getElementById(id).style.property = new style;
<button id="btn">button</button>
<script>
document.getElementById('div').addEventListener("click",function(){
alert('hello')
})
</script>
添加两个句柄没有任何问题
var x =document.getElementById('');
x.addEventListener("click",hello);
x.removeEventListener("click", hello);
function hello(){}
对象直接量——一副映射表;键名加引号是字符串,
var obj3 = {
name: "ys",
age: obj2.age, //引用obj2.age
like: {
drink: "water",
eat: "food"
}
};
console.log(obj3.age); //100
var obj1 = new Object();
var obj2 = new Array();
var obj3 = new Date();
var obj4 = new RegExp("ys");
console.log(typeof obj1); //object
console.log(typeof obj2); //object
console.log(typeof obj3); //object
console.log(typeof obj4); //object
function Person(name, age){
this.name = name;
this.age = age;
}
var obj1 = new Person("ys", 12);
console.log(Object.prototype.toString.call(obj1)); //object
console.log(Person instanceof Object); //true
console.log(typeof obj1); //object
console.log(obj1.age); //12
该方法有两个参数: 第一个参数:传入要继承的原型prototype对象 第二个参数是对对象的熟悉进行进一步的描述
var obj1 = Object.create({
name: "ys",
age: 12
});
console.log(obj1); //{}
console.log(obj1.age); //12
console.log(obj1.__proto__); //Object {name: "ys", age: 12}
对象本身为空,但是对象的原型链上数组不为空
####特殊情况
当第一个参数为null
var obj = Object.create(null); //不继承对象应有的属性和方法
console.log(obj2+"abc"); //报错 失去+功能
PS:Javascript中所有对象都继承自Object,Object处于继承的最顶端 本代码使得obj的原型删除了。即obj不再是对象
创建空对象
var obj3 = Object.create(Object.prototype);
console.log(obj3); //{},(空对象,与前两个方法 {},new Object 相同)
console.log(obj3.__proto__); //如下图 ,只包含了基本对象的方法
综合理解
var obj1 = {
name: "ys",
age: 12
};
obj1.prototype = {
sayName: function(){
return console.log(this.name);
}
};
/*①对象参数,只继承对象*/
var obj2 = Object.create(obj1);
console.log(obj2); //{}
console.log(obj2.name); //ys
/*console.log(obj2.sayName());*/ /* 报错 obj2.sayName is not a function*/
console.log(obj2.__proto__.prototype.sayName()); //ys 理解原型的原型
/*②对象原型,继承对象原型*/
var obj3 = Object.create(obj1.prototype);
console.log(obj3); //{}
console.log(obj3.name); //undefined,没有继承对象本身
obj3.name = "ys";
console.log(obj3.name); //ys
console.log(obj3.sayName());
JSON.stringify(obj) //将JSON转为字符串。
JSON.parse(string) //将字符串转为JSON格式;
$.parseJSON( jsonstr ); //jQuery.parseJSON(jsonstr),可以将json字符串转换成json对象
eval('(' + jsonstr + ')'); //可以将json字符串转换成json对象,注意需要在json字符外包裹一对小括号
http://www.json.org/提供了一个json.js
,这样ie8(兼容模式),ie7和ie6就可以支持JSON对象以及其stringify()和parse()方法;
可以在https://github.com/douglascrockford/JSON-js
上获取到这个js,一般现在用json2.js。<script>
var btn = document.getElementById("");
if(btn1.addEventListener){
btn.addEventListener("click",demo);
}else if(btn.attachEvent){
btn.attachEvent("onclick",demo)
}else{
btn.onclick =demo();
}
function demo(){}
</script>
<script>
document.getElementById("").addEventListener('click',demo);
function demo(event){
alert(event.type)
}
</script>
事件的默认行为:a标签的跳转行为
- 1.一切事物皆对象
- 2.对象具有封装和继承特性
- 3.信息隐藏
/*类似于类概念*/
function People(){
}
People.prototype.say = function(){
alert("hello");
}
function Student(){
}
Student.prototype = new People();//原型继承
/*Student.prototype.say=function(){//复写父类的方法会覆盖父类
alert("stu-Hello")
}*/
/*解决父类方法被覆盖的问题*/
var superSay = Student.prototype.say;
Student.prototype.say=function(){//复写父类的方法会覆盖父类
superSay.call(this);
alert("stu-Hello");
}
var s= new Student(); //创建一个对象来测试一下
s.say();
改变函数this指针:call、apply、bind
- 相同点:
- 都用来改变this对象的指向;
- 第一个参数都是this要指向的对象;
- 都可以利用后续参数传参
var xw = {
name : "小王",
gender : "男",
age : 24,
say : function() {
alert(this.name + " , " + this.gender + " ,今年" + this.age);
}
}
var xh = {
name : "小红",
gender : "女",
age : 18
}
xw.say();
三种方法的调用分别是
xw.say.call(xh);
xw.say.apply(xh);
xw.say.bind(xh)(); //bind方法返回的还是一个函数
即:call与apply都是对函数的直接调用。而bind方法返回的还是一个函数,需要加上()进行执行
var xw = {
name : "小王",
gender : "男",
age : 24,
say : function(school,grade) {
alert(this.name + " , " + this.gender + " ,今年" + this.age + " ,在" + school + "上" + grade);
} //say方法多了两个参数,因此需要进行传参
}
var xh = {
name : "小红",
gender : "女",
age : 18
}
则进行传参时,call与apply的应用:
xw.say.call(xh,"实验小学",“六年级”)
xw.say.spply(xh,["实验小学",“六年级”]);
即:call后面的参数是与say方法中的一一对应的。而apply的第二个参数是数组,数组中的元素是和say方法一一对应的。
正确理解this的对比代码
(function(){
var n= "ime";
function People(name){
this._name = name;
}
People.prototype.say = function(){
alert("peo-hello"+this._name);
}
//n需要给外部引用的话,需要给外部公开一个n的接口
//赋给顶级的window
window.People = People; //开放接口
}());
(function(){
function Student(name){
this._name =name;
}
Student.prototype =new People();
var superSay = Student.prototype.say;
Student.prototype.say =function(){
superSay.call(this);
alert("stu-hello"+this._name);
}
window.Student = Student;
}())
var s= new Student("Wang"); //创建一个对象来测试一下
s.say();
与
(function(){
var n ='ime';
function Person(name){
var _this ={};/*创建空对象*/
_this._name = name;
_this.sayHello = function(){
alert("PHello"+_this._name+n);
}
return _this;
}
window.Person =Person;
}());
function Teacher(name){
var _this = Person(name); /*将对象传递过去,对象的复制操作*/
var superSay = _this.sayHello;
_this.sayHello = function(){
superSay.call(_this);
alert("Thello"+_this._name);
}
return _this;
}
var t=Teacher("li");
t.sayHello();
- window对象是BOM的核心,window对象指当前浏览器窗口
- 所以JavaScript全局对象、函数以及变量均自动成为Window对象的成员
- 全局变量是window对象的属性
- 全局函数是window对象的方法
- 甚至HTML DOM的document也是window对象的属性之一
- 客户端js最高层对象之一
<script>
document.write();
window.document.write();
<script>
- 在一个设定的时间间隔之后来执行代码,而不是在函数被执行后立即调用——计时事件
/*延时执行*/
/*var win;
function mywin(){
win = setTimeout(function(){
alert("hello");
},3000)
}*/
/*长期不停执行——自己调自己*/
var win;
function mywin(){
alert("hello");
win = setTimeout(function(){
mywin();
},3000)
}
function stopwin(){
clearTimeout(win);
}
navigator对象包含有关浏览器的信息
IIFE 立即执行函数表达式的写法
常用的
括号和JS的一些操作符可以在函数表达式和函数声明上消除歧义 解析式会知道它是一个表达式,而且两者不能交换
一元运算符也可以,但是晦涩难懂
或者 new function(){. ...} new function(){...}()
//定义了一个参数为arg的匿名函数,并将param作为参数来调用这个匿名函数
(function(arg){...})(param)
//形参用$,实参用jQuery
(function($){...})(jQuery)
//等同于
var fn= function($){...};
fn(jQuery);
(function($){})(jQuery)是用来定义一些需要预先定义好的函数 $(function(){})用来在DOM加载完成之后,运行、执行预先定义好的函数
//在DOM加载完毕后执行了ready()方法
jQuery(function(){...});
//等同于
jQuery(document).ready(function(){...})
//执行()(para)匿名函数,但是传递了jQuery对象
(function(){...})(jQuery)
jQuery(function(){ });用于存放操作DOM对象的代码,执行其中代码时DOM对象已存在。不可用于存放开发插件的代码,因 为jQuery对象没有得到传递,外部通过jQuery.method也调用不了其中的方法(函数)。 (function(){ })(jQuery);用于存放开发插件的代码,执行其中代码时DOM不一定存在,所以直接自动执行DOM操作的代码 请小心使用。
当DOM已经加载,并且页面已经完全呈现的时候,触发ready事件 只试用于当前文档,无需选择器。
jquery为开发提供了两个方法:
jQuery.fn = jQuery.prototype ={ init:function(selector,context){} }
//jQuery.extend(0bj) 为jQuery类添加类方法——静态方法
$.extend({
add:function(a,b){return a+b;}
});
//使用这个方法
$.add(3,4);
//jQuery.fn.extend(object);对jQuery.prototype进行扩展——为jQuery添加成员函数,jQuery类的实例可以使用这个函数
$.fn.extend({
alertWhileClick: function(){
$(this).click(function(){
alert($(this).val());
});
}
})
//引用
$("#input1").alertWhileClick();
(function($){
})(jQuery)
(function( $ ){
$.fn.tooltip = function( options ) {
};
//等价于
var tooltip = {
function(options){
}
};
$.fn.extend(tooltip) = $.prototype.extend(tooltip) = $.fn.tooltip
})( jQuery );