js 原生基础(笔记汇总)

事件:用户的操作,行为(js) 结构(html)  样式(css) 三者分离!

一、获取元素:

1. document.getElementById        没获取到返回一个null

    不兼容:ie67    a. 忽略大小写    b. 表单name充当id

2 .document.getElementsByTagName    没获取到返回一个空数组

3. document.getElementsByClassName

4. document.getElementsByName

二、函数:

function 函数名(参数列表){  函数定义

arguments

js代码

return ;

}

函数名(参数列表); 函数的调用

变量:var  变量名 = 值;

----------------------------------

a.只有函数的定义 没有函数的调用 什么都不会发生

b.只有函数的调用 没有函数的定义 报错!

c.函数每执行一次 都会复制一份,包括里面的参数!

d.变量:变量的值以调用为准!

三、循环:while for 没有区别!

while 次数不定, for 次数固定

循环4个条件:a. 条件初始化   b. 条件判断   c. 执行语句   d. 自增  自减

四、数据类型:

1、"string" "number" "boolean" "undefined" "object" "function"

基本数据类型: string number boolean undefined

复合数据类型 :object function  (function——有争议!前端属于复合数据类型   分的标准:能分出新的数据类型)

2.类型转换: 隐式 强制

强制:parseInt/float/Number        隐式:   + : a 字符串连接     b 数字加  c - :数字减

字符串连接:字符跟任意一个东西进行连接都是字符串!

五、符号     

1.     =    赋值     

2.  ==  比较 勤快 1 类型转换 2 比较

3. ===  比较 1 直接比较值

4. > < >=

5.  true  1  false 0

6.  null 0  undefined -- 》 NaN

7.  假:0 ""  null undefined NaN false

六、return 返回值

变量 参数 返回值 没有数据类型 由值决定!

特性:

1 函数的返回值没有类型

2 函数后的代码不执行

3 return; 返回一个undefined

4 没有return 返回一个undefined  系统给

-----------------------------------------------

七、null 跟 undefined区别? (没有!)

1.null      a. 元素获取失败     b. 直接赋值 null     c. 事件默认值 null

2.undefined

a. 定义了没赋值

b. 真的没定义 

c. 函数没有明确返回值

d. 访问一个不存在的属性

e. 直接赋值 undefined

八、break continue

break continue; 终止循环语句

1.break    暴力  直接终止整个循环

2.continue  终止当前循环,进入下一轮循环

break 流程控制语句 switch

流程控制语句

if

switch

switch(变量){

case 值:

执行语句

break;

default: —— else

}

三目 条件?语句1:语句2;

if(条件){

语句;

}

&& : 条件  && 语句;

if(条件1 && 条件2 &&。。。。){

}

------------------------------------------------

九、运算符:

算术、比较、逻辑、赋值

十、定时器:

set/clearInterval(fn,time) (多次)

set/clearTimetout(fn,time) (一次)

十一、字符串与数组:

1. 字符串操作:

a. str.length(字符串长度)

b. str.indexOf(找东西) 从前往后 index  -1

c. str.lastIndexOf  从后往前

d. str.charAt(index)  字符

e. str.substring(beginIndex[,endIndex]) (字符串截取)  

    eg: "abcdef".substring(2,4); -->cd     截取的个数:endIndex - beginIndex,不包含最后一位 

f. str.split(切的规则)  返回数组

g. str.toLowerCase  小写   str.toUpperCase  大写

h. str.replace(str1|re,str2|fn);

i. str.match(re);  数组  没匹配到null

j. str.charCodeAt(index)--- > 返回code

k. String.fromCharCode(code) ---> 返回字符

2. 数组:

a. shift() 方法:把数组的第一个元素删除,并返回第一个元素的值

b. concat() 方法:用于连接两个或多个数组,并返回一个新数组,新数组是将参数添加到原数组中构成的 

c. join() 方法:用于把数组中的所有元素放入一个字符串。元素是通过指定的分隔符进行分隔的。

返回一个字符串。该字符串是通过把 arrayObject 的每个元素转换为字符串,然后把这些字符串连接起来,在两个元素之间插入separator字符串而生成的

d.  pop() 方法:用于删除并返回数组的最后一个(删除元素)元素,如果数组为空则返回undefined ,把数组长度减 1

e. push() 方法:可向数组的末尾添加一个或多个元素,并返回新的长度,(用来改变数组长度)

f.  reverse() :方法用于颠倒数组中元素的顺序

g.  slice() 方法:可从已有的数组中返回选定的元素。slice(开始截取位置,结束截取位置)

h. splice() :方法向/从数组中添加/删除项目,然后返回被删除的项目,splice() 方法可删除从 index 处开始的零个或多个元素,并且用参数列表中声明的一个或多个值来替换那些被删除的元素

i. unshift:将参数添加到原数组开头,并返回数组的长度 

j. sort(orderfunction):按指定的参数对数组进行排序 

arr.sort(function(n1,n2){//比较函数

return n1 - n2;// 从小大大

})  排序

十二、json

1. json: 存数据   arr:

比较值            json                 arr 区别

a. length              没有                  有

b.  循环for in          for                   for in 性能低

c.  下标               字符串                  数字

d.   顺序                无序                     有序

json:{key:value} 键值对  键唯一! 去重!

2.  字符串 转 json

a. eval("("+strJson+")")

b. JSON.parse(strJson);  格式严格 需要一个标准的json, 标准的json 字符串, 必须都是双引号!

c. json 转 字符串   JSON.stringify(json);

d. 兼容:eval全兼容    JSON 不兼容 ie8+

十三、样式的操作:

1. style 操作的是行间   obj.style.样式名 = value;     cssText: 行间怎么写 cssText 就怎么写!

       obj.style.cssText = "样式名:value";       cssText: 读 写     写: 会覆盖行间样式!

2. 获取非行间样式:   obj.currentStyle.样式名    getComputedStyle(obj,false/null).样式名  w3c规范

3.  false:伪类   

4. 不能获取复合样式!

十四、作用域:

1. 全局 定义在函数外 全局可用

2. 局部 定义在函数内 仅函数内可用

3. 闭包 子函数可以访问父函数的东西(变量 + 函数)

十五、封闭空间:闭包!

(function(){

})(参数列表);

解决什么问题:1. 事件里面的i    2. 定时器里面的i    好处:省了一个函数名  防止重名

十六、预解析: 把变量的定义(仅仅是定义)提升到最顶上(作用域)!

1. 范围: a. script     b. 作用域

2. 变的定义:var a = 12;    a. 定义 var a;    b. 赋值 a = 12;

3.  变量不带var  不会预解析!

4. return 后的代码不执行 但是会预解析     return 返回的代码不会预解析

5. 变量不会重复定义

十七、字符编码:

1. 中文范围:4e00-9fa5     

2. 0x —— 十六进制   

3.  \u —— unicode编码

4. utf-8  3字节

5. gbk    2字节

十八、try:异常 if

try{

  可能出错的代码

}catch(e){

  补救的代码 或者提示

}

不要使用try 性能低!

十九、js组成:

1.  ECMAScript 核心解释器 语法  BOM browser object model 操作浏览器的能力  DOM docuemnt object model 操作文档的能力

2. BOM:

a. alert √;     window.navigator.userAgent  √ ;   window.loaction  √

b. href  地址; hash  锚点 #name; host  主机名;  pathname  资源路径;  search    数据 ?

    protocol  协议http:// file://;   window.open();    √

c. 打开新窗口: open(url,打开方式);

    打开方式:_self / _blank(默认值)用户体验、安全: 用户自己点击的操作!

d. document.write();  window.close();  window.confirm();   window.prompt();

3. DOM

节点  ==  标签 == 元素;  

a. 父节点  parentNode 一个对象;  

b. 子节点  children;  数组

c. 兄弟节点:

    上一个 previousElementSibling ||previousSibling

    下一个 nextElementSibling ||nextSibling

d.  节点: 元素节点  文本节点  

    previousElementSibling 高级浏览器 元素节点

    previousSibling 所有浏览器  包含文本节点

    首尾:firstElementChild || firstChild  children[0]

              lastElementChild || lastChild    children[len-1]

e. 创建节点

    obj.tagName  标签名 都是大写;  var oDiv = documemnt.createElement("标题名");

    (a) 只能从document 创建元素

    (b) 是添加到某一个具体的元素内 不能是document

    (c) 创建忽略大小写

    (d) 创建只能是英文 不能是中文 不兼容ie

f. 添加节点

    父级.appendChild(obj);    父级.insertBefore(obj,谁前面);

g. 删除节点

    父级.removeChild(obj);    obj.parentNode.removeChlild(obj);

二十、盒子模型

offset:

  offsetWidth/Height

  offsetTop/Left

  offsetParent

offsetWidth/Height:盒模型大小

盒模型:一个元素实际所占位置的大小

1 组成:width + padding + border  不包含margin

2 display:none; 没有盒模型

3 元素不设置宽高也有盒模型 内容决定

offsetTop/Left  一个元素距离定位父级的左边距 上边距

offsetParent  定位父级

function getPos(obj){

var l = 0;

var t = 0;

while(obj){

l += obj.offsetLeft;

t += obj.offsetTop;

obj = obj.offsetParent;

}

  return {left:l,top:t};

}

根:

节点根:document 虚拟节点 parentNode -> null

定位的跟:body offsetParent-> null

-----------------------------------------

scrollLeft/Top/Height

document.documentElement.scrollLeft/Top  ie ff

document.body.scrollLeft/Top  chrome

documentElement html

二十一、瀑布流

瀑布流: 等宽不等高!

往最短的div 插入元素!

二十二、事件

1.事件  运动 seajs/requirejs ajax  jsonp  正则

addMouseWheel lagou  翻转  chrome  webqq

事件:用户的操作

事件对象:描述事件的详细信息

event  ie chrome

ev  高级浏览器 ie9+

var oEvent = ev || event;

oEvent 什么属性?

clinetX/Y:可视区的坐标  最好把scrollTop/Left

2. 键盘事件 keyCode:

回车:13

方向:37 - 40

a-z: 65 - 97

0-9: 48 - 57

3. pageX/Y 鼠标距离页面的左上角的距离

pageX = clientX + scrollLeft

pageY = clentY + scrollTop

4. 功能键:

shift/alt/ctrilKey

5. 冒泡:cancelBubble = true;

什么叫冒泡? 子元素的事件可以传播到父级身上!

特性:

a. 元素的不添加事件也会冒泡

b. 跟位置无关 只跟父子级关系

c. 冒泡可以取消

默认事件:浏览器自带的行为、功能

都可以取消:return false;

事件绑定 return false失效?

6. 哪个绑定会失效?

addEventListener —— ev.preventDefault();

2个绑定:

ie: obj.attachEvent(on+事件名,事件函数);

高级浏览器:

obj.addEventListener(事件名,事件函数,false);

事件流:事件捕获 + 冒泡

false  可以省略 但是不能省!

      冒泡

7. true:事件捕获

    99.9999% 都不会用!  —— 面试!

8. 解绑定:

detachEvent 

removeEventListener

注意:匿名函数不能解除绑定!

9. 鼠标事件

onmouseover/out  -- bug

onmouseover:判断一个来源

fromElement ie chrome

relatedTraget 高级浏览器

onmouseout:判断一个去向

toElement ie chrome

relatedTraget  高级浏览器

父级.contains(子元素);  是 true  不是 false

10. 事件委托:srcElement ie  chrome

target  高级浏览器

好处:性能  推荐用事件委托!

11. 滚轮 :

wheelDelta  —— onmousewheel  ie chrome

detail —— DOMMouseScroll  ff

addMouseWheel  ——方向  上 下

下 true 火狐

wheelDelta 上120 下 -120

detail  上-3 下 3

onclik  onmouseover onmouseover onmouseenter

onmouseleave onkeydown onkeyup onmousemove

onmoseup onmousedown onscroll onresize onload

onreadystatechange oncontextmenu onmosewheel

onfocus onblur  onchange DOMMouseScroll

DOMContentLoaded onsubmit onpropertychange oninput

DOMContentLoaded —— onload

onreadystatechange

dom树:documet

onreadystatechange

readyState: interactive 正在渲染 complete 渲染完成

二十三、运动

运动的三要素: 起点  终点  时间

       1. 定时器:30ms 

          距离:终点 - 起点 dis

          次数:时间/30 count

          n

          位置: 起点 + 距离*n/count

     2. 360角度 = 2PI弧度

        n*1弧度 = n*180/Pi角度

二十四、seajs:

1 “自动”帮你引入代码

2 “自动”解决依赖

模块化开发: 

模块:一个js文件就是一个模块!

3. 如何定义一个模块

define(function(require,exprots,module){

    注意事项:

    1 变量名不能修改

    2 exprots module 不能共存  module优先!

      module.exprots == exprots true


});

4. 如何使用一个模块

seajs.use(str/[js1,js2],function(mod1,mod2....){

});

请求模块:

use    html ---> js

require js ---> js

二十四、requirejs

使用模块

require([js1,js2],function(mod1,mod2....){

});

二十五、ajax 状态码只有三位

ajax: 请求数据

1. 创建

  a.XMLHttpRequest();  ie7+  给高级浏览器用

  b.ActiveXObject("Microsoft.XMLHTTP"); IE678

  c.兼容:

    (a) window

    (b) try catch  不推荐

    (c) 判断浏览器

    (d) addEventListener

    (e)  in

2. 连接

        open(方式,地址,是否异步 true);

        方式: get post

        get  数据在地址栏上  不安全            小32k  有缓存

        post  不在          相对安全https      1G    没有缓存

        https  数据加密    银行  钱  "慢"

        http  数据不安全  明文传输  快

        缓存:浏览器对同一个地址只会访问一次!

        解决:地址不一样

         添加一个随机因子(随机数)

         a. Math.random()  √

          b. 时间戳

          c. Math.random() + 时间戳

3. 发送

        xhr.send();

4. 接收

        xhr.onreadystatechange = 回调函数;

       readyState:

                 (0) 对象创建完成

                 (1)  连接完成

                 (2) 数据发送完成

                 (3) 接收数据  报文头  响应头

                 (4) 接收数据  报文体  响应正文

                  if(xhr.readyState == 4){//完成  并不代表成功

                        //http的状态 xhr.status[200,300)  304

                            if(xhr.status >= 200 && xhr.status < 300 || xhr.status == 304){

                                        //成功

                                    内容: xhr.responseText

                                        } else {

                                                //失败

                                    }

                     }

5. http的状态: 一共三位 第一位代表类型

        1xx  服务器正在响应请求、处理

        2xx  成功

        3xx  重定向

                304 Not Modified  缓存

        4xx  失败  —— 前端失败

                  404 not found

                  414 Request-URI Too Large

                  自己查百度 4xx

       5xx  失败  —— 后端失败

                  503 宕机

                   http状态组成:状态码status + 文字描述 statusText

6. post:

        a. open

        b. 设置一个请求头

          xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");

        c. send(数据)

7. ajax  请求数据 不能跨域

       jsonp 跨域请求数据

        跨域:只要 协议 域名 后缀 端口 任意一个不同 就算跨域!

        为什么不能跨域?

        安全:—— 同源策略!浏览器限制的!

        http组成:

                http://    www.    zhinengshe  .com      :80  /index.html

                协议      二级域名    主域名  后缀类型  端口  资源

                http://www.baidu.com

                http://mp3.baidu.com

                http://tieba.baidu.com

                http://map.baidu.com

                http://d.c.b.a.baidu.com

                可以

                http://www.baidu.com/a.html

                http://www.baidu.com/b.html 

                不可以

                http://www.baidu.com/a.html

                https://www.baidu.com/b.html

                不可以

                http://mp3.baidu.com/a.html

                http://www.baidu.com/b.html

                不可以

                http://www.baidu.com:80/a.html

                http://www.baidu.com:8080/b.html

8.jsonp原理:

        a. 文件后缀对计算机没有任何意义 —— 给人看的

        b. script标签可以访问任何网站的文件

        baidu:

                https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su?wd=aaa&&cb=xxxx

                wd:word

                cb:callback

        360:

            http://sug.so.360.cn/suggest?callback=xxxx&word=aaaa

二十六、script

script标签是一次性!

   总结:

            1. 创建script

            2. 准备一个全局函数

toUTCString : 世界标准时间  √

toGMTString : 格林威治时间

二十七、正则表达式

正则:用计算机的语言描述一个规则!

正则 大陆——正则表达式  台湾——规则表达式

正则对象:RegExp

var re = new RegExp("规则","选项");

var re = /规则/选项;

选项:三种img  没有顺序

i: ignore 忽略大小写

m: mutil-line 多行匹配

g: global  全局匹配

str.match(re);  数组 没匹配到 null

str.search(re); index  -1

str.replace(str1|re,str2|fn);

function(匹配到的东西){

必须有返回值!

}

re.test(str)  true匹配到了  false没找到

正则的脾气:

1 懒 g

2 蠢 加量词 + 若干

3 贪婪 尽可能多的匹配东西

正则规则:

中括号:[];

一  范围

[a-z]

[4-6]

-----------------------------------------

二  任选一个

/[abcdef]/  a  b  c d e f

/a[bcd]/

abi  ac  ad 

/a[bcd]+/

abbbbbb

acccc

adddd

  ** 量词 只管一个

/a(bc)+/

abcbcbc.....

() 分组  要么都出现 要么都不出现!

-----------------------------------------

三  排除  ^ 必须出现在第一位!

[^a-z]

[0-9^a-z] ×

-----------------------------------------

转义:转换一种含义  \

只有特定字母才有!

计算机: \n \r  \t tab \f  \b  \u

\d  数字

\w  wrod 单词  字母 数字下划线 [a-zA-Z0-9_]

\s  空字符

\b  单词边界

\D  非数字 [^0-9]

\W  非单词  [^a-zA-Z0-9_]

\S  非空字符

\B  非单词边界

.  任意字符 

--------------------------------

量词:个数

{n}    正好n个  /\d{5}/

{n,m}  最少n个 最多m个

{n,}  最少n个 多了不限

{,m}  ×

+ 若干  {1,} 至少有一个

* 任意  {0,} 可以没有    慎用!

? 可有可无  {0,1}

--------------------------------

^ 行首

$ 行尾

-----------------------------

二十八、表单三要素

1 action 数据提交到哪

2 name  叫什么

3 value  值是什么

表单:

用户名:32位 第一位必须是英文 必须六位以上

    /^[a-z]\w{5,31}$/i

邮箱:[email protected]

      chen00jian    @  sina      .com    .cn

  \w+          @ [a-z0-9\-]+  (\.[a-z]{2,6}){1,2}

电话号码: 区号[3,4] + 号码[7,8]

          (0\d{2,3}  -)?    [1-9]\d{6,7}


年龄:16-100

  16-19  20-99  100

  1[6-9]|[2-9]\d|100

-----------------------------------------

性能优化 mvc

你可能感兴趣的:(js 原生基础(笔记汇总))