javaScript学习笔记

   
 

<!-- 主流浏览器 --> 内核

  IE trident
  Chroem webkit/blink
  firefox Gecko
  Opera presto
  Safari webkit
  <script type="text/javascript" src=""></script>
  变量( variable)
  var a; (声明变量) let
  a=100
  document.write(a);
   

 

弱类型语言、动态语言、基于原型的面向对象

   
  ECMAscript 语法规范
  DOM 文档对象模型
  BOM 浏览器对象模型
   
  click 点击事件
  js 语句 ;结束
  变量 作用 是用来储存值得
  变量的声明 var a,b,c='abc',
  变量的赋值 a = 2;
  变量的命名
  输出在控制台输出 console.log(a)
   
  console.log()会在浏览器控制台打印出信息
  console.dir()可以显示一个对象的所有属性和方法
   
 

<!-- 基本数据类型(栈)-->

  undefined 表示未定义未负值 null清空内容()
   
  number数字类型
   
  string 字符串类型用“” 要换行拼接 用+号
   
  false假(0) 和 true真(1)
  检测数据类型(typeoof a)
   
 

<!-- 系统对话框 -->

  alert(1234)弹出框
   
  确认框 confirm(你确定) 接收 真 假
  提示 默认值
  输入框 prompt(输入银行卡 ,“123” ) 输入内容
   
   
  引用类型 (堆)
  array 数组 Function 函数 object对象
   
  array 数组
   
  属性 下标 0开始
  console.log(a[0])
   
  Function 函数 代码块
   
  名字(随便起)
  Function sayhi(){
  var a = 1
  console.log(a)
  } 函数需要执行才会显示
  函数调用 函数名加()
   
   
  object 对象 无序
   
  js类值对象 date 时间对象 math数学对象 RegExp 正则
   
  方法 :
   
   
  length 长度
  continue; 跳过本轮循环
  break;终止整个循环
  default:默认语句
  for(){}循环
   
  while(条件(a>5)){ a--}循环 当什么 满足括号里面的条件执行循环体
   
  do{}while()
   
  window.onload=function(){}
   
  return 函数返回值 遇到return函数就不再往下执行了
   
  this.style.background=
   
   
   
 

<!-- 对象 创建 以及调用-->

  json对象 创建 var car={key:value ,} 注意一定要用逗号隔开
  空对象创建方式 var car= new object() 给空对象添加属性 car.name='张三',
  对象调用方法: car.key 点的方式调用, car[key]来调用
  两种调用方法的区别[]调用方式能调用 Number类型的key元素,还能调用变量类型的元素。
   
 

<!-- js 对象 -->

  内置对象:string 对象,Array对象,math数学对象,Date日期对象,regExp正则表达式
  自定义对象:1、json形式对象 2、new object 3、工厂函数 4、构造函数
  原型属性 prototype 完成继承和共享
   
  constructor--构造器--分辨对象属于哪个构造函数 console.log(元素.coustructor)
  instanceof---左边是对象<-->右边是构造器--判断是否相等
  Object.keys()---查看所有一个对象本身---的所有属性----返回一个数组;
   
 

<!-- this 的指向-->

  纯粹的函数中--this代表 window
  json对象的this---》指向上一层对象
  事件函数中this代表当前发生事件的元素对象
  构造函数中--this带表实例化函数对象、
  this的存储嵌套使用 var that=this
   
  改变this的指向call和apply--->完成继承
  call函数 把this指向改变成了car 可以说继承了car
  say.call(car,6,7);
  say.apply(car,[6,7]);
  相同之处都可以改变this指向完成继承
  不同之处--参数的设置不同
   
  <!-- bind()-->
  this值会被绑定到传给bind()函数的值
   
   
  <!--创建数组-->
  数组:数组可以是储存一组或者一系列相关数据的容器
  访问数组的数据用索引(下标),从0开始
  数组可以储存任何类型的值
  <!--构造法创建数组-->
  1.var arr=new Array('1',55,true)
  <!--字面量方式创建-->
  var arr1=[]
   
  数组长度arr.lenth
  可以手动截取数组的长度 减小数组长度
  增加数组长度 对数组没有什么影响增加的都是undefined
  清空数组 arr.lenth=0
   
   
 

<!--数组的方法-->

  push()在数组的末端添加一个元素,返回新的长度,
  unshift()在数组的第一个位置添加一个元素,返回新的长度,
  pop()删除数组的最后一个元素,返回被删除的元素,
  shift()删除第一元素,返回被删除的元素
  splice(index(从第几个开始删除),num(删除几个,不删除就用0代替),ele(在删除的地方添加元素))返回被删除的元素
   
  reverse()--用于颠倒数组中元素的顺序,返回改变后的数组
   
  sort() --不是按照大小排序,而是按照对应字符串的assic编码顺序排序,
  如果按照其他顺序排序可以在括号里输入函数function(a,b){return b-a }反序
  join()--以参数作为数组每一项的分割符,组成一个字符串返回,不提供参数默认为逗号分割 看返回值
  join('')把数组转换成字符串
  concat()---连接一个或者多个数组 返回新的数组
  slice(start(从哪开始下标),end(结束))留头不留尾 不影响原数组
  --选取数组的一部分,返回新的数组 , 如果就传一个数字就是选取到到最后
  forEach(function(ele(数组的每一项),index(下标),arr(整个数组)){})遍历数组的方法
   
   
  <!--Array.isArray-->(x)判断是不是数组 返回true false
   
 

<!--字符串的方法-->

  1.charAt(index)--返回下标处的字符
  2.charCodeAt(index):返回字符的unicode编码整数 charCodeAt编码大于225为中文字符小于则为英文字符
  ()代表指定位置上的字符 unicode编码
  3。fromCharCode():传Unicode 编码 返回相应的字符
  4.indexOf():返回string对象第一次该出现字符的字符位置 如果没有出现则返回-1
  5.lastIndexOf();返回string对象中最后一次出现该字符的字符位置
  通常拿4,5组合做判断是否是只出现过一次,4==5则只出现一次
  <!--字符串截取-->
  6.substr(index,unm)从index开始截取,截取unm个, 一个参数截取到最后
  7.substring(start,end)从start开始截取,到end结束,留头不留尾 一个参数截取到最后
  8.toLowercase():返回一个字符串,该字符串被转换为小写字母
  9.toUpperCase():返回一个字符串,该字符串被转换为大写字母,
  10.split():将一个字符串分割为数组,不传参 --把字符串分割为数组一项,传''把字符串分割为数组的每一项
  ("")把字符串转换成数组
  11.replace(old(要被替换的字符),new(替换成***)):返回根据正则表达式进行文字替换后的字符串的复制
   
   
 

<!--**--------------事件------->

  onclick 点击事件
  ie和谷歌中window.onmousewheel 鼠标滚轮滚动事件
  ff火狐中window.addEventListener('DOMMouseScroll',function (){},true ) 滚轮滚动事件
   
  window.onresize 窗口大小改变事件
  window.onscroll 页面滚动事件
  window.onhashchange hash值改变事件
   
  onfocus 获取焦点事件
  onblur 失去焦点事件
  onmousemove 鼠标移入一直触发 鼠标移动事件
  clientY 鼠标Y轴 clientX 鼠标X轴 可视网页 pageX 鼠标X轴 pageY 鼠标Y轴 整个网页
  onmouseover js鼠标移入 触发一次 this。className移入子元素也触发事件
  onmouseout 鼠标移出 鼠标移入
   
  onmouseenter 鼠标移入 和上面一组的区别 是移入子元素不触发事件 只在自身触发事件
  onmouseleave 鼠标移出
   
  onmousedown 事件会在鼠标按键被按下时发生。
  offsetX -- offsetY 事件源发生事件的位置
  鼠标右键e.button=2 左键button=0 滚动条button=1
  onmouseup 鼠标抬起时触发
  ondblclick 双击事件
  oncontextmenu 鼠标右键事件
  return false e.preventDefault() 阻止右键菜单出现
   
  document.onkeypress 键盘事件
  onkeyup 键盘抬起事件
  onkeydown 键盘按下触发 可以连续触发 任意键盘按键 不能区分大小写
  onkeypress 键盘按下触发 可以连续触发 字母类键盘按键 对应asc码的 能区分大小写
  onkeyup 键盘抬起触发 不可以连续触发
  document/window.onresize 整个窗口大小改变事件
  document/window.onscroll 页面滚动事件 scrollY滚动条Y轴的距离
  window.pageYOffset 滚动条Y轴的距离
   
   
 

<!-- 文本类事件-->

  oninput 表单内容改变事件
  form表单 -- action: 地址提交 method:提交方式
  onchange 事件 表单元素改变事件 下拉框,复选框,单选框
  selectedIndex----选取下标
  onsubmit 表单提交时触发事件
  docoument.forms[0]--获取页面中表单
  onreset--表单重置时触发
  var x=confirm(确认重置表格吗)
  retrun -- false 阻止默认事件
  e.preventDefault()阻止默认事件
  onselect ---文本输入框的文字被选中事件
   
  <!-- **Date日对象期-->
  new Date()获取系统时间
  <!--setInterval定时器-->重复执行
  setInterval(function,时间(2000),函数的实参),每两秒获取一次系统时间
  toLocaleString()--日期和时间转换为本地格式的字符串
  clearInterval(定时器名字)清除定时器
  <!--延时器 -->
  setTimeout (fn,延迟时间,参数) 只执行一次
  clearsetTimeout暂停延时器 (输入延时器名字)
   
 

<!--日期对象的方法-->

  var myDate=new Date();(2018,09,20)(2018-09-20)
  获取年、 设置
  var year=myDate.get(获取)/set(截取)Fullyear();//2018
  获取月
  var month=myDate.getMonth();//0-11 月要加1
  获取日
  var days=myDate.getDate();//0-31
  获取星期
  var week=myDate.getday();//0-6
  获取小时
  var hour=myDate.getHours();//0-24
  获取分钟
  var minutes=myDate.getMinutes();//0-59
  获取秒
  var second=myDate.getSeconds();//0-59
  获取毫秒
  var millisecond=myDate.getMilliseconds();//0-999
  <!--getTime() 获取距离1970年1月的毫秒数-->
  document.write(myDate.getTime())
  <!-- 方法中加UTC代表世界时间-->
  var second=myDate.getUTCHours()
   
   
  <!--转换格式-->
  toLocaleString()--把日期和时间转成本地格式字符串;
  toLocaleDateString()--把日期转成本地带格式字符串
  toLocaleTimeString()--把时间转成本地带格式字符串
  toGMTString()--把日期和时间转成格林威治的字符串
   
   
  <!--时间戳-->
  浏览器的储存 localStorage.buy
   
 

<!-- 数学对象math-->

  属性
  math.PI----π---圆周率---3.14 Math.PI*r*r(圆的面积)
  Math.E自然常数,是数学科的一种法则。约为2.1782
  2的平方根 Math.SQRT2--1.414
   
  <!-- 数学方法-->
  1、随机数 Math.random()--返回0-1之间的随机数包含0不包含1
  随机数公式a-b之间的随机数整数
  Math.floor(Math.random()*(b-a)+a)
  2、向下取整Math.floor()
  3、向上取整Math.ceil()
  4、四舍五入 Math.round()
  5、最大值 math.max(x,y,z)
  6、最小值 math.min(x,y,z)
  7.x的y次幂 Math.pow(x,y)
  8平方根 Math.sqrt(7);
   
   
 

<!-- 正则表达式-->

  (Regular Expression、regex),是用来描述匹配一系列符合某个句法规则的字符串
  主要 是检测数据验证,文本替换、内容检索与过滤等
   
  <!-- 正则表达是的创建 -->
  1、构造法
  var reg =new RegExp("[0-9]{4}");
  2、字面量创建
  var reg1=/^[1-9][0-9]{4,9}&/;qq号的;
   
  <!-- 正则的方法:-->
  test():匹配一个字符串是否符合正则表达式,成功返回true失败返回false
  varx=reg.test(tval)
  exec();如果发现匹配就返回一个 数组,否则返回null
   
  <!-- 正则给字符串用的方法:-->
  str. match(正则表达式)--找到一个或者多个正则表达式的匹配值,返回一个数组
  search(正则表达式)--搜索与正则表达式相匹配的值,返回值得下标值,如果没有返回-1
  split()--按照正则表达式分割字符串
  replace(正则表达式,替换成字符串)--替换字符串
   
   
  <!-- 正则的书写规则;-->https://c.runoob.com/front-end/854 正则网站https://c.runoob.com/front-end/854
  修饰符/.../g --g-全局匹配
  /.../i --i -不区分大小写
  ^ ---开头 /^[]{}$/
  $ ---结尾
  * 任意次,可任意看做{0,}
  ? 0次或者一次,可以看做{0,1}
  + 一次或者任意次,可以看做{1,}
  {m} 正好m次
  {m,} 至少m次
  {m,n}至少出现m次 最多n次,默认是按最多次数
  {m,n}? 按最少次数匹配
  [^a]非a
  [] --限定某一位上字符的取值范围,
  任意字符:【abc】a、b、c中任意的字符
  组合:【a-z0-9A-Z】
  排除:【^a】
  \w --匹配字母数字下划线的字符【a-zA-Z0-9】
  \W --匹配除字母数字下滑线之外的字符 [^a-zA-Z0-9] 和上面刚好相反
  \d --匹配数字[0-9]
  \D --匹配非数字
  \s --匹配空白字符,空格制表符和换行符;
  () --正则表达式的分组 | --正则的逻辑 或
  . --代表除了换行以外的任何字符
  \ --表示转义符
   
   
   
   
  <!-- Error.name的六种错误信息-->
  1、EvalError;eval()的使用与定义不一致
  2、RangeError:数值越界
  3、referenceError;非法或者不能识别的引用数值;
  4,SyntaxError;非法语法解析错误
  5,TypeRrror;操作数据类型错误
  6、URIError:URI处理函数使用不当
   
   
 

<!-- dom增 删 改-->

  增加属性
  1、自带属性
  divs.id='box';
  divs.className='text'
  2.自定义属性setAttribute
  divs.setAttribute('index','0');
   
  3元素添加内容
  inpus.value='sss'
  divs.innerHTML--设置文本和标签
  outerHTML--替换标签和文本内容
   
  <!-- 创建元素添加到页面 -->
  创建元素var divs=document.createElement('div')
  var hs=document.createElement('h3') 创建元素
  1.父对象.appendChild(追加的对象) 插入到父元素
   
   
  <!-- 操作元素的属性-->
  1、自带属性
  2、自定义属性
  getAttribute 获取自定义属性
  var imgindex=img.get(获取)Attribute('index')
  setAttribute 设置属性 添加属性
  img.set(设置)Attribute('src'(属性名),'img2.jpg'(属性值))
  classList.add 在元素中添加一个或多个类名。
  .contains(class)返回布尔值,判断指定的类名是否存在。
  .remove(class1, class2, ...)移除元素中一个或多个类名。
  .toggle(class, true|false)在元素中切换类名。第一个参数为要在元素中移除的类名,并返回 false。
  如果该类名不存在则会在元素中添加类名,并返回 true。
  移除属性
  img.remove(移出)Attribute(属性)
  hasAttribute('属性')---判断当前元素节点是否包含指定属性,返回布尔值
  instanceof是Java的一个二元操作符(运算符),也是Java的保留关键字。它的作用是判断其左边对象是否为其右边类的实例,返回的是boolean类型的数据。用它来判断某个对象是否是某个Class类的实例。
   用法:boolean result = object instanceof class
   
   
   
   
  Object.prototype.hasOwnProperty.call(obj, 'bar'); // true 判断'bar'是不是obj原型链上的属性
   
  dom一起设置多个样式:
  box.style.cssText='width:200px;height:200px;'
  insertBefore 元素前面插入元素:
  父元素.insertBefore(插入的元素,参照物)
   
   
   
  <!-- dom --> 最大的对象是document
  document.title---网页的标题
  document.body---网页标签
  document.documentElement--整个文档 html
  document.URL ---返回当前文档的url网站的地址
  document.bgColor--body的背景
  document.fgColor--文字颜色
  <!-- 如何获取样式-->
  ie浏览器--获取css样式e.currentStyle.width(属性)
  谷歌和火狐FF浏览器:getComputedStyle(对象,null).color(属性)
   
  <!--元素对象 属性-->
  nodeType--节点类型
  //1--代表元素
  //3--代表文本节点 data代表节点内的文本
  8--代表注释节点
  nodeName---元素节点名--LI--大写
  ---文本节点--#text
  ---注释节点--#comment
  <!-- * 获取节点-->
  获取第一个节点firstChild 获取元素中间加一个Element
  console.log(two.firstChild);
  获取最后一个节点 lastChilid
  console.log(two.lasttChild);
  获取下一个兄弟节点 nextSibling
  console.log(two.nextSibling);
  获取前一个兄弟节点 previousSibling
  console.log(two.previousSibling);
  所有的子节点childNodes
  console.log(two.childNodes);
  父节点--父元素parentNode
  console.log(two.parentNode);
  返回有定位属性的父元素----offsetParent
  console.log(two.offsetParent)
  返回所有子元素children[]
  console.log(two.children)
   
  <!-- 获取元素-->
  item
  document.querySelector("body>.list>li") 只能选第一个
  document.querySelectorAll("body>.list>li") 集合节点列表 静态
  var a = document.createElement("li") 添加标签 创建一个元素
   
  <!-- * 删除元素-->
  replaceChild 替换
  替换节点 父元素.replaceChild(要替换的,被替换的)
  removeChild 删除
  删除节点 父元素.removeChild(删除的元素);
  remove 自毁
  删除元素本身 元素本身.remove()
   
  <!-- * 事件冒泡-->
  addEventListener事件监听 冒泡 捕获
  addEventListener(事件,执行函数,true) false冒泡 true捕获
  ff// e.stopPropagation() 阻止冒泡
  ie// window.event.cancelBubble=true; 阻止冒泡
  <!-- ** ---事件委托-->
  ** e.target---事件委托 把事件绑定在父元素上,通过e.target来操作发生事的元素
  box.innerHTML=e.target.innerHTML
  e.type-----返回事件类型
  e.offsetX--e.offsetY--鼠标在事件元素上发生的位置
   
   
  <!-- 获取整个可视页面的高度 -->
  left=(window.innerwidth/2-自身宽度的一半)+'px'
  top=(window.innerheight/2-自身高度的一半)+'px
   
  offsetWidth和offsetHeight 获取包括元素的宽度和高度包括padding和边框
  var left=box.offsetWidth
  clientWidth和clientHeight ---返回元素宽高,不包含滚动条和边框 包含padding
  scrollHeight和scrollwidth ---没有滚动条时 和clientWidth相等
  出现滚动条后---包含隐藏部分的宽度
  //------------------------------------------------
  offsetLeft和offsetTop---距离父元素的左和上的距离
  clientLeft和clientTop--返回元素边框的宽度
  scrollLeft和scrollTop --返回元素的滚动条距离
   
  window.onscroll=function(e){
  var top=document.body.scrollTop||document.documentElement.scrollTop;获取滚动条Y轴的滚动距离
  console.log(window.pageYOffset+' '+window.pageXOffset) 获取滚动条XY轴的滚动距离
  }
   
   
   
   
  <!-- BOM -->
  innerWidth--innerHeight----窗口的宽高 不包括地址栏
  outerWidth--outerHeight---窗口的宽高--包括地址栏
  window.length返回窗口中的框架数
   
  <!-- Bom全局方法-->
  alert('警告框')
  confirm('确认框')
  var x=prompt('输入名字','李(默认值)')
   
  window.open( URL(网页地址),name(网页,名字),specs(能设置新网页的宽高属性),replace)打开新的网页
  window.close() 关闭窗口
  ie支持
  window.resizeBy() 按照指定的像素调整窗口的大小
  window.resizeTo() 把窗口的大小调整到指定的宽高
  ** window.scrollBy() 按照指定的像素值来滚动内容
  ** window.scrollTo() 把内容滚动到指定的坐标
   
   
  screen对象---对象包含有关客户端显示屏幕的信息
  document.write(window.screen.width+'--'+window.screen.height)
  screen.availHeight 返回显示屏幕的高度 (除window 任务栏之外)
  screen.colorDepth 返回目标设备或缓冲器上的调色板的比特深度
  pixelDepth 返回显示屏幕的颜色分辨率(比特每像素)
   
  <!-- navigator---返回浏览器信息-->
  navigator.appCodeName---浏览器代码名 mozilla
  navigator.appName--Netscape--浏览器名称
  navigator.version--浏览器的版本
  navigator.language--浏览器语言
  navigator.platform--浏览器操作系统
   
  navigator.userAgent--返回用户请求头信息
  navigator.userAgent--返回用户请求头信息
  if(navigator.useragent.indexOf('Chrome')!=-1){
  alert('谷歌浏览器')
  }
   
  http://www.baidu.com---域名
  http://--协议
  域名--域名解析---DNS服务器---ip地址()
  端口号(0-65536)
   
  <!-- location 的属性--> 对象包含有关短期URL的信息
  location.href 设置或返回完整的URL地址
  location.host----返回ip和端口
  hostname---返回ip
  hort---端口号
  pathname路劲部分
  protocol协议
  用href去跳转并添加?号后面是search和#号后面试hash值
  <!-- * location.href='' -->
  search设置或者返回从?开始的URL(查询部分)
  hash设置或者返回从#号开始的URL(锚)
   
  <!-- 地址栏传汉字 -->
  编码 encodeURI()
  location.href="a.html?name="+encodeURI("张三");
  decodeURI("张三")解码
   
  <!-- location得方法 -->
  location.assign('http/...') 加载页面 产生历史记录能返回
  location.replace('http/..') 加载页面 不能返回
  location.reload() 不传参 用来刷新页面重新加载
   
   
  <!-- history 对象 的方法 -->
  history.forward() 前进一步类似在浏览器中点击前进按钮
  history.back() 退一步,类似在浏览器的工具栏返回按钮
  hisstory.go(-2) 可以参传正负 前进几步后退几步
   
   
  <!-- cookie---->-浏览器的储存 html5(localStorage)
   
  cookie--大小 4kb左右大小
  1byte = 8bit
  1024b = 1kb
   
  一个ip地址只能有一套cookie
  设置cookie 第一个参数 name=value
  document.cookie='name=zhangsan'
  设置cookie过期时间 expires=时间
  var mydate=new Date();
  mydate.setMinutes(26)
  document.cookie='age=88;expires='+mydate.toGMTString();
  获取cookie
  var cookies=document.cookie;
   
  <!-- 克隆 -->
  cloneNode(true)克隆元素的内容
  var myli=lis[1].cloneNode(true)
   
  <!-- json形式对象 -->
  var obj={
  name:'张三';
  age:4;
  set:function(){
  }
  }
  JSON,全称是javaScript Object Notation。
  它基于是javaScript编程语言的一种轻量级的数据交换格式,
  主要用于跟服务器进行交换数据,跟xml相类似,它独立语言,在跨平台数据传输上有很大的优势
  jion 的key值要加“”;
  方括号保存数组[]
   
  JSON转字符串 JSON.stringify
  var carstr=JSON.stringify(obj);
   
  字符串转JSON
  JSON.parse(carstr);
   
  eval --方法能解析代码字符串的能力非常强大,但也非常危险
  因此在使用eval是需极为谨慎,特别是在用他执行用户输入的情况下;
  否则可能会有恶意用用户输入威胁你的站点或应程序安全的代码(即所谓的代码驻入)
  var x=eval(str)
   
   
  prototype--- 继承和共享
  prototype--函数才有的数据
  __proto__ 原型链是每个对象都有的属性
  原型指向上一层对象的原型 最终指向unll
   
  requestAnimationFrame(fn)requestAnimationFrame的用法与settimeout很相似,只是不需要设置时间间隔而已。requestAnimationFrame使用一个回调函数作为参数,这个回调函数会在浏览器重绘之前调用。它返回一个整数,表示定时器的编号,这个值可以传递给cancelAnimationFrame用于取消这个函数的执行
  requestID = requestAnimationFrame(callback);
  cancelAnimationFrame方法用于取消定时器 cancelAnimationFrame(1或者timer);
   
   
posted @ 2019-05-28 16:05  Z十六画生  阅读(96)  评论(0编辑  收藏  举报