js笔记1

var直接定义用等于=
间接定义用:
返回值的类型:函数可以声明另一个函数 可以一层套一层 要调用函数也要声明
立即执行函数:只执行一次function(){…}
函数也可以成为对象属性 称为方法 什么什么.(点)什么什么称为调用方法
定义一个函数后面加括号 function() 或function fun()
枚举对象的属性 for(var 变量 in对象)[]可以传变量.不可以传变量 所以说明属性内容使用对象【】
var会在所有代码执行之前声明
函数声明:使用function声明的函数 会在所有代码执行之前创建
使用函数表达式不会被提前创建(var)
函数作用域每执行一次会创建一个函数作用域 用完即销
函数不使用var声明的变量都会成为全局变量
(“a=”+c)
this:函数每次执行时都会向函数内部传递一个隐含的参数
this指向的是一个对象,这个对象称为上下文对象
函数调用的方式不同 this指向的对象也不同
1:以函数形式调用时,this指的是window
2:以方法形式调用时,this指的是调用的对象
this是一个指针永远指向其所在函数的所有者,如果没有所有者则指向window
函数使用时要求有东西可以传出 防止无效
构造函数执行流程 首字母一般大写
1:立即创建一个新的对象 var per=new person();
2:将新建对象设置为this 在构造函数可以使用this来使用新对象
3:着行执行函数代码
4:将新建对象做为返回值返回
使用同一个函数创建的对象我们统称为一类对象 也称一个类
新建对象称为什么什么类的实例 per称为person的实例
检查一个对象是否为一个类的实例 对象instanceof实例 per instanceof Person
原型对象:
prototype:每个函数都有自动添加一个属性称为原型对象 在构造函数中可以使用作为公共区域使用
使用方式为.prototype.来访问该属性 可以将一个类的公共部分作为prototype属性使用
当我们访问一个对象的属性或方法时,优先在对象本身的属性方法寻找,找到则使用,找不到则在原型对象中寻找 原型对象是开辟的一个公共空间
使用in检查对象的属性时可以检查出原型对象的属性;检查属性应该加引号 (“属性” in 对象);
使用hasOwnProperty不可以检查出原型对象的属性 只会检查出对象本身的属性(对象hasOwnProperty(“对象”));
属性命名首字母不用数字
原型对象也有原型对象 object对象无原型 如果在object无则返回undefined
prototype(显式原型)__ proto__(隐式原型)
数组用length获取数组长度 数组.length
数组可以放任何数据类型 数组存放函数时array=[function{},function(){}]调用时 array;
存放对象时array=[{n:}];
二维数组[[]]
arr.concat()多个数组粘贴到一起 不影响arr 数组 结果作为返回值返回
数组初始化用的是【】
arr.join()将数组转换为字符串 可加一个参数"…“为字符串连接符 不影响原数组 结果作为返回值返回
arr.reverse()反转数组 改变原数组
arr.sort(function(a,b){})函数返回值大于0则a,b交换顺序 等于0不变 小于0也不变
arguments 在调用函数时 浏览器会传递两个隐含的参数 1:this 2:封装实参 arguments
arguments是一个类数组对象 但不是数组 有索引可通过索引调用 也可像数组一样输出其长度
argunments有一个属性 callee这个属性对应一个对象 就是当前arguments指向的函数对象
Date 日期属性 var d=new Date(); 可自定义时间 格式 Date(“月/日/年 时:分:秒”);
属性 :对象.getDate() 获取当前对象是几日
对象.getDay()获取当前对象是一周的星期几 会返回一个0-6的值
对象.getMonth()获取对象是几月 返回一个0-11的值
对象.getYear()获取对象是几年
对象.getTime()获取当前日期从格林威治标准时间1970年一月一日0时0秒的时间戳 计算机保存时间都是使用时间戳来进行保存 保存单位是毫秒制 利用时间戳来测试代码执行的性能
Date.now获取现在的时间
正则表达式 两种定义方式 1:var reg=new RegExp(“模式”,“属性”);
2 var reg=/模式/属性
split用于正则表达式可以传递一个正则表达式作为拆分参数 格式str.split(/[]/);
正则表达式好处在于灵活
两种属性 i忽视大小写 g全局匹配 比如说match之后匹配找到的第一个 使用正则表达式属性g即可全部找到 match会将找到结过封装一个数组
replace()两个参数 被替换参数 替换参数 默认替换第一个 可使用正则表达式 全局匹配
可以设置量词{}只对靠近它的第一个起作用 {n,m}n-m次{m,}m次以上 +表示一个以上不包括一相当于{1,}
{n*m}m有0个以上 从1开始
dom对象 可以为按钮对应时间绑定处理函数的形式来响应事件
当事件触发时其对应的函数会被调用
window.onload 代码在页面全部加载后执行
dom查询 getElementById() 通过id属性来获取一个元素节点
getElenmentsByTagName() 通过标签吗来获取一组元素对象 返回的为一个数组
getElenmentsByName() 通过name属性来获取一组元素节点对象 返回的为数组
内联样式的修改 id.style.样式=“修改大小”;
-符号应该修改为驼峰命名法 例如 background-color改为backgroundColor
内联样式优先级较高
innerHTML格式 innerHTMl=“x=”+x+”,y="+y;
event对象事件 当绑定一个响应函数时 浏览器会讲一个事件对象作为传递一个实参 例如function(event)这个实参
事件对象中封装了该事件对象的一切信息 例如鼠标的坐标 键盘的位置
onmousemove随鼠标移动触发事件 event.属性
event.clientX是当前可见窗口的鼠标坐标
event.pageX是当前页面的鼠标坐标
解决兼容 用||
随鼠标移动移动元素设置时该元素要设置绝对定位 position:absolute 绑定响应事件时要设置全局document
chrome浏览器任务滚动条 scroll时body的 其他浏览器则认为是documentElement
设置的位置要注意在函数内还是在函数外
事件冒泡:事件向上传导,当后代元素的事件被触发时,其祖先元素相同事件也会被触发
可设置一个元素.cancelBumble=true取消冒泡
使用js来加a链接时 应该使用href=单引号
事件的委派:指将事件统一指派给元素共同的祖先元素 通过事件冒泡到祖先元素 再进行触发响应函数
event.target.属性target值触发事件的元素
事件传播分为三个阶段
1:捕获阶段 从最外层的祖先元素向目标元素进行事件的捕获 一般不会触发事件
2:目标阶段:事件捕获到目标元素,捕获结束开始在目标元素上触发事件
3:冒泡阶段:事件从目标元素向祖先元素冒泡 层层触发事件
定时器的使用 setIterval(函数,时间)时间以毫秒为单位
清除定时器setInterval()括号内为清除的函数
对数组进行赋值使用【】而不是{}
数组栈方法(后进先出):push()推入一个函数 在末尾推入括号内的数组
pop()在末尾推出一个数组
队列方法(先进先出):unshfit()在数组开头推入数组;
shift()在数组开头推出一个数组;
重排序方法:reverse()将数组顺序颠倒;
sort()括号内可加入函数 进行排序 比如 function compare(a,b){return a-b}
操作方法 concat()加入括号内的元素 不改变原数组
slice(a,b)两个参数 去a-b之间的元素 不改变原数组
最强的操作方法
splice删除 splice(a,b)删除a-b的参数
替换 splice(a,b…)从第a项开始替换 替换b项
增加 splice(a,0,…)从第几项开始增加
RegExp类型 三个标志 “g” 全局模式
i 不区分大小写
m 多行模式 会自动换行
字面量创建var re=/cat/gi;
构造函数创建 var re=RegExp(“cat”,“gi”);
方法 exec()接收一个参数 返回一个包含第一个匹配项的数组 没有匹配项的情况下返回null
返回的数组有两个属性 index 匹配项在字符串的位置
input 应用正则表达式的字符 第一项是与整个模式匹配的字符 其他项是与其他其他捕获组匹配的字符
在全局模式(g)下多次重复使用exec即可对下一个匹配字符进行搜索
非全局模式 多次重复使用也不能对下一个匹配字符进行搜素
test()返回true或者false;
RegExp构造函数属性 RegExp.input最近一次匹配的字符串
RegExp.lastmatch最近一次要匹配的字符串
RegExp.leftContext匹配到的字符串之前的字符串(文本)
RegExp.rightContext匹配到的字符串之后的字符串(文本)
RegExp.lastparen最近一次匹配的捕获组
function类型 两种定义方式 函数声明 functiom sum(a,b){}
函数表达式 var sum=function(a,b){}
两种定义方式的唯一区别 函数声明:解析器在执行代码会优先执行函数声明在其他代码可用前函数声明被执行
函数表达式:按照解析器代码行执行顺序执行
函数内部属性 arguments.callee 该函数是一个指针 指向的是拥有arguments这个对象的函数
this 函数执行环境的对象·
函数执行方法: apply() call() 作用:可改变函数的作用域 两个区别是call()第二个参数需要一一列举数组中的元素
bind() 作用:创建一个函数的实例 其括号内的值会成为该实例绑定的this var o=b.bind(s); o的this是s
Math对象 寻找一个数组中的最大值 可用 var max=Math.max.apply(Math,array);
array即为数组 该方法实际上是改变了this的值
寻找最小值同理
舍入方法 Math.ceil()向上舍入
Math.round()标准摄入
Math.floor()向下舍入
取随机数 Math.random()*1取0-1的随机数
可使用 Math.floor(random()*n+k);改变取数的范围
ES 数据属性 四个configurable:表示能否通过delete删除属性 从而重新定义属性
enumerable:表示能否通过for-in循环返回属性
writable:表示能否可改属性值
value:该属性的数据值
value默认undefined 其他默认false
修改这四个特性的方法 使用Object.defineproperty(a,b,c)方法访问 三个参数 a修改的对象 b属性的名字 c一个描述符的对象(四个特性)
工厂模式

                                      alert(person.name);
	 person.name="danding";
	 delete person.name;
	 console.log(person.name);
	 function Person(name,age,job){
		 this.name=name;
		 this.age=age;
		 this.job=job;
	 }
	 var person1=new Person("nico","26","work");
	 var person2=new Person("danding","12","work");
	 console.log(person1 instanceof Person);
	 console.log(person1 instanceof Object);
	 console.log(person2);
	 原型属性 访问时先访问实例自身属性中值 再访问原型中的值 实例自身属性可删除
	 function Person(){
	 }
	 Person.prototype.name="Nico";
	 Person.prototype.age=24;
	 Person.prototype.job="work";
	 var person1=new Person();
	 var person2=new Person();
	 person1.name="greg";
	 console.log(person1.name);
	 delete person1.name;
	 console.log(person1.name);
	 hasOwnProperty() 属于实例本事返回true 属于原型则返回false
	 console.log(person1.hasOwnProperty("name"));
	 console.log(person2.name);
	 in操作符 实例中存在该属性即可返回true 无论是本身还是原型中的
	 console.log("name" in person1);
	 console.log("name" in person2);
	 也可使用下列方式快捷定义protoype
	  Person.prototype={
		 name:"Nico",
		 age:24,
		 job:"work"
	 }
            原型的动态性 
            当重写一个对象的原型属性时 会切断与任何之前已经存在的对象的实例之间的关系 应用的仍然是最初的原型
     var friend=new Person();
	 Person.prototype.name="work";
	  /*Person.prototype={
		 name:"Nico",
		 age:24,
		 job:"work"
	 }*/
	 console.log(friend.name)
	 动态原型模式 判断
	 function Person(name,age,job){
		 this.name=name;
		 this.age=age;
		 this.job=job;
	 }
	 if(typeof this.sayname!="function"){
		 Person.prototype.sayname=function(){
			 alert(this.name);
		 }
	 }
	 var friend=new Person("nico","23","work");
	 friend.sayname();           
	 不能使用对象字面量重新写原型 会断开与原来对象的联系

递归 使用arguments.callee代替函数名 可以保证使用时不会出问题 更加保险
function factoral(num){
if(num<=1){
return 1;
}
else{
return num*arguments.callee(num-1);
}
}
var anotherFactoral=factoral;
factoral=null;
alert(anotherFactoral(4));

 闭包 即函数嵌套       

私有作用域 函数表达式后面加圆括号
(function(){})();

上述情况会发生报错 因为i存在私有作用域中 访问不到

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值