JavaScript基础(2)---dom,bom,变量类型,事件,ajax

变量类型:

JavaScript中变量有值类型和引用类型,值类型就是直接给变量赋值,引用类型是把一个地址指针赋值给变量

引用类型包括------》数组,对象和函数,其它为值类型

  用typeof可以区分哪些类型?

1  typeof undefined     //undefined
2        typeof 123           //number
3        typeof ‘abc‘         //string
4        typeof true          //boolean
5        typeof []            //object
6        typeof {}            //object
7        typeof console.log    //function
8        typeof null          //object

可以从结果看到,typeof不能区分数组类型,对象类型和null,都是输出object类型

  ==和===的区别

  ==是不严格的等于,===要求你的数据类型以及值都要相等,所以能用三个等号的就用

1 false == 0      //true
2       false === 0      //false
3       1 == ‘1‘         //true
4       1 === ‘1‘         //false

  使用两个等号的时候JavaScript会进行强制类型转换,试图让两个比较对象相等

  什么时候使用两个等号合适呢:比如if(obj.a == null)  这时候相当于obj.a === null 或 obj.a === undefined(jquery源码中是这么写的,我没读过)

  使用instanceof

    使用instanceof就可以区分是否是array类型的了

 var arr = []
arr instanceof Array      //true

  JavaScript的内置函数

  我个人的理解就是需要new出来的就是内置函数,因为如果自己定义一个构造函数的话,你也要new出一个实例对象才能使用  

1 Array
2 String
3 Object
4 Boolean
5 Function
6 Error
7 Regexp
8 Number
9 Date

  JavaScript的内置对象

  常用的有Math, json

dom

  dom的本质

      浏览器把那道 html代码,结构化一个浏览器能识别并且js可操作的一个模型

    dom操作中property和attribute的区别

    prototye和attribute都是操作属性,不同的是prototype操作的是dom对象上的属性,attribute操作的是html上的属性

     一个div的prototype属性如下,我自定义的oppo属性在attributes里,而attributes又包含在prototype里

      常用的Attribute,例如id、class、title等,已经被作为Property附加到DOM对象上,可以和Property一样取值和赋值。但是自定义的Attribute,就不会有这样的特殊优待,只要是DOM标签中出现的属性(html代码),都是Attribute。然后有些常用特性(id、class、title等),会被转化为Property。可以很形象的说,这些特性/属性,是“脚踏两只船”的

      

      处理dom固有属性时用prop,处理自己定义的属性时用attr,这样比较合适

Bom

  在w3c中,Browser对象就是bom

1 navigator.userAgent    //返回浏览器用于 HTTP 请求的用户代理头的值
2 location.hash //返回#后面的值
3 location.protocal //返回http或https
4 location.search //返回从?开始的url部分
5 location.port //返回端口号,比如8080
6 location.href //返回完整的url路径

原生ajax

  

 1 // 1. 创建一个 XMLHttpRequest 类型的对象 —— 相当于打开了一个浏览器
 2 var xhr = new XMLHttpRequest()
 3 // 2. 打开与一个网址之间的连接 —— 相当于在地址栏输入访问地址
 4 xhr.open(‘GET‘, ‘./time.php‘)
 5 // 3. 通过连接发送一次请求 —— 相当于回车或者点击访问发送请求
 6 xhr.send(null)
 7 // 4. 指定 xhr 状态变化事件处理函数 —— 相当于处理网页呈现后的操作
 8 xhr.onreadystatechange = function () {
 9 // 通过 xhr 的 readyState 判断此次请求的响应是否接收完成
10 if (this.readyState === 4) {
11 // 通过 xhr 的 responseText 获取到响应的响应体
12 console.log(this)
13 }
14 }

  get请求

 1 var xhr = new XMLHttpRequest()
 2 // GET 请求传递参数通常使用的是问号传参
 3 // 这里可以在请求地址后面加上参数,从而传递数据到服务端
 4 xhr.open(‘GET‘, ‘./delete.php?id=1‘)
 5 // 一般在 GET 请求时无需设置响应体,可以传 null 或者干脆不传
 6 xhr.send(null)
 7 xhr.onreadystatechange = function () {
 8 if (this.readyState === 4) {
 9 console.log(this.responseText)
10 }
11 }
12 // 一般情况下 URL 传递的都是参数性质的数据,而 POST 一般都是业务数据

  post请求

 1 var xhr = new XMLHttpRequest()
 2 // open 方法的第一个参数的作用就是设置请求的 method
 3 xhr.open(‘POST‘, ‘./add.php‘)
 4 // 设置请求头中的 Content‐Type 为 application/x‐www‐form‐urlencoded
 5 // 标识此次请求的请求体格式为 urlencoded 以便于服务端接收数据
 6 xhr.setRequestHeader(‘Content‐Type‘, ‘application/x‐www‐form‐urlencoded‘)
 7 // 需要提交到服务端的数据可以通过 send 方法的参数传递
 8 // 格式:key1=value1&key2=value2
 9 xhr.send(‘key1=value1&key2=value2‘)
10 xhr.onreadystatechange = function () {
11 if (this.readyState === 4) {
12 console.log(this.responseText)
13 }
14 }

事件

  JavaScript中绑定事件可以用addEventListener

    比如绑定click,可以用onclick,也可以用addEventListener(‘click’,function(){})

    onclick绑定的点击事件会覆盖,addEventListener绑定的click不会覆盖(就是可以绑定多个click事件)

    事件冒泡

    点击div里的p后,p的点击事件被触发,事件冒泡到div,divde点击事件也被动触发

    想阻止冒泡事件可以解开第9行的注释

 1 <body>
 2     <div class="wrapper">
 3       <p class="one">one</p>
 4       <p class="two">two</p>
 5       <p class="three">three</p>
 6     </div>
 7     <script>
 8       var one = document.querySelector(".one").addEventListener(‘click‘,function(e){
 9         // e.stopPropagation()     //阻止事件冒泡
10         alert(‘this is one‘)
11       })
12       var wrapper = document.querySelector(".wrapper").addEventListener(‘click‘,function(){
13         alert(‘this is wrapper‘)
14       })
15     </script>
16   </body>

    但是,假设一个场景,如果上述div是一个无限下拉的页面,点击每个p都要打印出p的内容,那应该怎么办?

    给每个p都绑定事件时不可能的,一是你不知道有多少个p, 二是这样太麻烦了

    这时候我们可以写一个函数

    

 1  function bindEvent(elem, type, selector, fn){
 2         if(fn == null){
 3           fn = selector       //如果没有传入selector,给fn赋值,把selector设置为null
 4           selector = null
 5         }
 6         elem.addEventListener(type, function(e){
 7             var target
 8             if(selector){
 9               //获取触发此事件的元素
10               target = e.target
11               console.log(target)
12               //检测是否是代理元素触发的
13               if(target.matches(selector)){
14                 fn.call(target, e)
15               }
16             } else {
17               fn(e)
18             }
19         })
20       }
21       var wrapper = document.querySelector(‘.wrapper‘)
22       var one = document.querySelector(‘.one‘)
23       //不使用代理
24       // bindEvent(wrapper,"click",function(){
25       //   console.log(one.innerHTML)
26       // })
27
28       //使用代理
29       bindEvent(wrapper,"click",‘p‘,function(e){
30         console.log(this.innerHTML)
31       })

    给最外层的div绑定一个点击事件,通过事件冒泡,当点击里面的p元素时,冒泡触发外层的div。这样无论你有多少个p,只要绑定一个事件就行。

    第14行的call() 方法调用一个函数, 其具有一个指定的this值和分别地提供的参数,所以第30行的this就是call里的第一个参数target

常用数组API

forEach 遍历所有数组,对空数组不会执行回调函数

every 判断所有元素是否都符合条件

some 判断至少有一个元素符合条件

sort 默认升序排序,会改变原数组

map 根据条件对数组重新组装,生成新数组,不改变原数组

filter 过滤符合条件的元素,生成新数组,不改变原数组

原文地址:https://www.cnblogs.com/zhaozhaoli/p/10061205.html

时间: 2024-10-16 20:35:41

JavaScript基础(2)---dom,bom,变量类型,事件,ajax的相关文章

【javascript基础】3、变量和作用域

原文:[javascript基础]3.变量和作用域 前言 这篇和大家说一下javascript中的变量和作用域,由于是将基础嘛,主要给大家捋一下知识,不想翻开书复习的道友可以看一下,打算刚开始学习javascript的同学可以扫一眼. PS:jQuery源码交流群( 239147101)等你来,群里高手云集,让我受益匪浅,尽量少灌水. 变量 javascript中有两种变量,分别是基本类型和引用类型,基本类型是Null,Undefined,String,Boolean,Number这五种,前面简

javascript学习笔记---ECMAScript-判断变量类型

判断类型之前,先要清楚有哪些类型. (理理思路:程序由数据和方法构成,数据由简单数据和复杂数据构成) 即类型有: 数据(简单数据:boolean,string,num,undefined,null.复杂数据:object), 方法(function) 万能的typeof,神一样的方法 typeof(1);// num typeof("hello");// string   typeof(false);// boolean var vFlag; typeof(vFlag);// unde

JavaScript基础:DOM操作详解

本文最初发表于博客园,并在GitHub上持续更新前端的系列文章.欢迎在GitHub上关注我,一起入门和进阶前端. 以下是正文. 前言 JavaScript的组成 JavaScript基础分为三个部分: ECMAScript:JavaScript的语法标准.包括变量.表达式.运算符.函数.if语句.for语句等. DOM:文档对象模型,操作网页上的元素的API.比如让盒子移动.变色.轮播图等. BOM:浏览器对象模型,操作浏览器部分功能的API.比如让浏览器自动滚动. 事件 JS是以事件驱动为核心

JavaScript之我学一变量类型

本文是网易云课堂金旭亮老师的课程笔记,记录下来,以供备忘. 变量类型  只有6种 : 四种原始数据类型boolean , number, string , undefine, 其他object,function是对象 typeof,instanceof   直接看实例: var obj = null; console.info(typeof obj); //Object var arr = []; console.info(arr instanceof Object); //true conso

go基础语法-内置变量类型

内建变量类型 1.内建变量一览 bool,string (u)int,(u)int8,(u)int16,(u)int32,(u)int64,uintptr 无长度int的实际长度取决于操作系统位数(32/64) uintptr为指针类型 byte,rune rune相当于其他语言的char,长度为int4(32位) float32,float32,complex64,complex128 complex为复数(1+1i) 2.强制类型转换 golang有严格的类型匹配,不同的类型之间通常需要手动

JavaScript基础之函数和变量作用域

函数:封装一项任务的步骤清单的代码段,再起一个名字 ( js中函数也是一个引用类型的对象,函数名其实也是引用函数对象的普通变量.) 函数对象:内存中专门存储一个函数定义的存储空间 函数定义的存储位置在window之外. 何时使用:一项任务可能反复使用时,就仅需要在函数中封装一次,反复调用函数即可. 如何声明函数: function 函数名([参数1,参数2,...]){ 步骤清单 return 返回值 } 参数:专门接受函数调用时,必要数据的变量 如何使用参数:在函数内,参数变量的使用和普通变量

JavaScript基础 空字符串转为数值类型 Number()

镇场诗: 清心感悟智慧语,不着世间名与利.学水处下纳百川,舍尽贡高我慢意. 学有小成返哺根,愿铸一良心博客.诚心于此写经验,愿见文者得启发.------------------------------------------ code: 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=ut

JavaScript基础之DOM修改样式

1.获取或设置元素的内容:3个属性:   1. innerHTML: 获取或设置元素开始标签到结束标签之间的所有HTML代码原文.      何时使用:只要获得完整的html代码原文时      优化:如果批量删除或插入多个子元素时,尽量避免单个操作!            每次插入或删除操作都会导致排版引擎重新layout.            如果批量删除或插入,排版引擎只需要一次layout即可.      如何优化:                1. 删除: parent.inner

python基础(1) 变量类型

变量赋值: python中的变量不需要类型声明 每个变量在使用前必须赋值,变量赋值以后才会被创建 变量在内存中创建时,包括变量的标识.名称和数据这些信息. EX: 1 #!/usr/bin/python 2 # -*- coding: UTF-8 -*- 3 4 counter = 100 # 赋值整型变量 5 miles = 1000.0 # 浮点型 6 name = "John" # 字符串 7 8 print counter 9 print miles 10 print name