一.JS知识点梳理

数据类型:

一,原始类型: Number String Boolean null undefined
二,引用类型

转字符串:

x.toString() 如果x为undefined 和 null 报错
String(x) 万能
快速转换 x+""

转数字

Number(x)
parseInt(str)
parseFloat(str)
"6"-0=6

转布尔

true
false "" null 0 undefined NaN
!x
!!x


逻辑运算&& ||

&&:两个条件必须都为true,才返回true,只要有一个为false,则返回false
||:两个条件只要有一个为true,就返回true,除非所有条件都为false,才返回false

短路逻辑:

  1. 1件事,满足条件就做,不满足条件,就不做!
    条件&&(操作);
    何时使用:如果操作仅有一两句话时
  2. 如果前一个值有效,就用前一个,否则就用后一个
    值1| |值2

三目运算(如果操作语句简单就用三目吧)

条件1?(值1或操作1):
条件2?(值2或操作2):
默认值或操作;


编码

url中不允许出现多字节字符
encodeURI()将多字节字符编码为utf-8格式的单字节字符(中文转) encodeURI("百")=>"%E7%99%BE"
decodeURI()将受到编码后的单字节字符解码为多字节字符原文 decodeURI("%E7%99%BE")=>"百"


url中不允许出现保留字 比如:/
encodeURIComponent()编码
decodeURIComponent()解码


eval()执行字符串格式的语句或表达式


js中分母是0,不报错!返回:Infinity
isFinite(n) 判断是否有效数字范围内


分支结构

if(){}else{}...

switch..case结构 当条件为"全等"比较时

switch(表达式){
    case x1: 代码段;
    break;
    case x2: 代码段;
    break;
       ....
     default;
}

循环结构

var 循环变量=初始值;
while(循环条件){
    循环体;
    迭代修改循环变量;
}
var 循环变量=初始值;
do{
    循环体;
    迭代修改循环变量;
}while(循环条件)

for(var 循环变量=初始值;循环条件;迭代修改循环变量){循环体;}


数组

创建数组的集中方法:

var arr=[];
var arr=new Array();

var arr=[1,2,3...]

var arr=new Array(n)

var arr=new Array(1,2,3...)

案例:找最大值

function getMax(arr){
    var max=arr[0];
    for(var i=1;i<arr.length;i++){
        arr[i]>max&&(max=arr[i]);
    }
    return max;
}
console.log(getMax([3,7,8,9,6,2,5,3]))

案例:冒泡排序

 function bSort(arr) {
        for(var r=1;r<arr.length;r++){
            for (var i = 0; i < arr.length-r; i++) {
                if(arr[i]>arr[i+1]){
                    arr[i]+=arr[i+1];
                    arr[i+1]=arr[i]-arr[i+1];
                    arr[i]-=arr[i+1]
                }
            }
        }
        return arr;
    }
bSort([6,5,3,8,96,9,0]);
console.log( bSort([6,5,3,8,96,9,0]))

关联数组(hash数组)

遍历:

for(var key in arr){
    arr[key]
}

案例:利用关联数组统计个数或去重

 var arr=[5,3,6,9,8,2,6,5,9];
    var hash=[];
    for(var i=0;i<arr.length;i++){
        if(hash[arr[i]]!=undefined){
            hash[arr[i]]++;
        }else{
            hash[arr[i]]=1;
        }
    }
    console.log(hash)//[2: 1, 3: 1, 5: 2, 6: 2, 8: 1, 9: 2] hash[key]出个数了
    arr=[];
   for(var key in hash){
        arr[arr.length]=(key-0)
   }

数组API

 数组排序sort方法:
      升序:function compare(a,b){return a-b;}
      降序:function compare(a,b){return b-a;}
      arr.sort(compare);
 arr.toString()
 arr.join()  //频繁字符串拼接,推荐使用数组的join方法作为替代
 arr.concat()
 arr.slice()
 arr.splice()
 arr.reverse()
 arr.sort()  //只能将所有元素转化为字符串再排序 无法对数字类型排序
 arr.push() //末尾入栈
 arr.pop() //末尾出栈
 arr.unshift() //开头入栈
 arr.shift()  //开头入栈

二维数组:arr[r][l]

遍历二维数组:固定套路:外层循环遍历行,内层循环遍历列

for(var r=0;r<arr.length;i++){
   for(var l=0;l<arr[r].length;l++){
       arr[r][l]
   }
}

内置对象:ES标准中规定,浏览器厂商已经实现的对象 11

String Number Boolean Array RegExp Math Date Error Function Object Global(全局对象window)


String API

 str[i]
 str.length
 str.slice()
 str.substring() //正牌截取字符串的api
 str.substr() //丛几开始 获取几个only
 str.split() //切割完了之后是数组
 str.concat()
 str.toUpperCase()
 str.toLowerCase()
 str.charAt(i) //=str[i]
 str.charCodeAt(i) //指定下标的unicode号
 str.indexOf()           //返回的关键词第一个字符的下标的位置
 str.lastIndexOf()

正则表达式 查找 验证 替换 切割

预定义字符集:
一个数字==>\d [0-9]
一个数字/字母/下划线 ==>\w [0-9a-zA-Z_]
一个空白字符 ==> \s [\n\r\t\v\f]
除了回车和换行的任意单个字符==> . [^\n\r]

数量
至少m个,最多n个 ==> {m,n}
m个以上 ==> {m,}
必须m个 ==> {m}
可有可无,多了不限==> *
可有可无,最多一个==> ?
1个以上 ==> +

选择和分组 ==> | ( )

匹配开头和结尾^正则$

正则API

var i=str.search(reg) //只适合判断有没有 如果没有返回-1
var kwords=str.match(reg)//i区分大小写 g全局 如果不加g只匹配第一个 返回的是一个数组 如果没找到返回null 用之前最好先判断
str.replace(reg,"替换值") 注:reg后一般都要加g

查找:==>

var arr=reg.exec(str)
返回数组
arr[0]获取内容
arr.index关键词首字母位置

验证==>几乎都要加^ $

var bool=reg.test(str)


数学方法

Math.ceil(n) 上取整
Math.floor(n) 下取整
Math.round(n) 四舍五入取整
n.toFixed(d) 按任意小数位数 返回String
ParseInt(Math.random()*(max-min+1)+min) --->随机数


日期对象

var now=new Date()
var date=new Date("2017/06/30 10:04:00")
var date=new Date(2017,06,30,10,05,00)
getTime() //获取的是毫秒数

分量值(get或set) 星期没有set方法 Month需要+1

getFullYear()
getMonth()
getDate()
getDay()
getHours()
getMinutes()
getSeconds()
getMilliseconds()

错误处理

try{
       可能发生错误的代码
}catch(err){ //err中发生错误时会自动收到创建的error对象
    err.message: 保存了错误的详细原因
    err.name: 保存了错误对象的名称
如果发生错误,才执行的错误处理代码
}[finally{ //无论是否发生错误,都执行的代码 *一定会在退出*之前*执行*
    一般释放用过的对象资源:xxx=null
}]

js的语法不支持重载--->可使用arguments实现重载效果。
arguments.length ------------->参数值的个数
arguments[i] ------------------->获得下标为i位置的参数值

创建函数的三种方式

function 函数名(参数列表){函数体;return 值}
var 函数名=function(参数列表){函数体;return 值}
var 函数名=new Function("参数1","参数2",...,"函数体");

匿名函数

(function(参数列表){
    函数体;
   return 值
})(参数值列表);

闭包

函数嵌套!内层函数使用外层函数的局部变量,内层函数被返回到外部,在外部调用。


面向对象--->将多个相关的属性和函数集中定义在一个对象中

创建对象的三种方法: 直接量 new创建 利用构造函数反复创建多个相同结构的对象

var obj{属性名:属性值,方法名:function(){} }
var obj=new Object();   obj.属性名=值;  obj.方法名=function(){}

function fun(a,b){
    this.a=a;
    this.b=b;
    this.intrSelf=function(){xxx}
}
var obj=new fun("lili",20)

obj.a-->lili
obj.b-->20

原型和原型链

  1. 判断对象的属性是自有,还是共有:3种情况
    自有属性:保存在对象本地的属性
    共有属性:保存在公共原型对象中的属性
    如何判断一个属性是否可用 2种
    1.in关键字:"属性名" in 对象
    如果"属性名"在当前对象的原型链中,返回true 如果在整条原型链上都没找到,返回false
    eg:console.log("intrSelf" in hmm)
    2.使用===undefined:说明不包含! 简写为(!对象.成员名)
    专门判断是否自有属性:obj.hasOwnProperty("成员");
    如果obj本地有指定"成员",则返回true,没有返回false
    判断共有属性:不是自有的,还要存在于原型链上
    if(!obj.hasOwnProperty("成员")&&"成员" in obj)

  2. 获得任意对象的proto属性:获得父级对象
    var 父对象=Object.getPrototypeOf(对象);

  3. 判断父对象是否处在子对象原型链的上级:
    父对象.isPrototypeOf(子对象)
    只要父对象在子对象的原型链上,就返回true 否则返回false


DOM

核心DOM适合操作节点,如创建,删除,查找等 HTML DOM适合操作属性,如读取或修改属性的值

查找元素
var elem=document.getElementById("id值");              ----->按id查找
var elems=node.getElementsByTagName("tagName")         ----->按标签名查找
var elems=node.getElementsByClassName("类名");        ----->按className查找
var elems=document.getElementsByName("name属性的值")   ----->按name名 查找
var form=document.forms["form的id值"];                ----->按id查找form
var input=form["name属性值"];                          ----->获取form下指定name元素
var elem=node.querySelector("任意选择器");             ----->查找一个符合条件的元素
var elems=node.querySelectorAll("任意选择器");         ----->查找全部符合条件的元素
读取修改元素的属性
var str=elem.getAttribute("属性名");                   ----->获取元素的属性名
elem.setAttribute("属性名","属性值");                  ----->设置元素的属性为XX
var str=elem.属性名                                    ----->获取元素的属性  HTML DOM
elem.属性名="值";                                      ----->设置元素的属性为XX  HTML DOM
elem.removeAttribute("属性名");                        ----->移除属性
elem.属性名="";                                        ----->移除属性 HTML DOM
elem.attributes:返回属性数组                           ----->获取元素所有属性
elem.hasAttribute("属性名")                            ----->判断是否包含某个属性
创建节点
var newNode=document.createElement("标签名")           ---->创建一个空标签名
newNode.属性名="值"                                    ---->给标签添加设置属性
parent.appendChild(newNode);                           ---->追加到指定父元素后边
parent.insertBefore(newNode,oldNode);                  ----> 插入到指定父元素前边
增加文档片段
var frag=document.createDocumentFragment();            ----> 创建文档片段
frag.appendChild(新节点);                              ---->将子元素追加到片段中
parent.appendChild(frag);                              ---->将片段追加到指定父元素中
删除节点
var deleted=parent.removeChild(childNode);             ---->删除节点
var deleted=parent.replaceChild(newChild,oldChild);    ---->替换节点
对话框
alert("提示信息");---只有确定按钮
var str=prompt("提示信息");
var bool=confirm("提示信息");--确定和取消
css样式设置
var str=elem.style.css属性
function getStyle ( obj, attr ) { 
    return obj.currentStyle?obj.currentStyle[attr] : getComputedStyle( obj )[attr]; 
}
elem.style.css属性名="属性值"
Table
var tr=table.insertRow(i);              ---->增加行 省略i,表示在末尾追加一行
table.deleteRow(i);                     ---->删除行,必须知道要删除行的下标
tBodies                                 ---->多个tbody元素对象的集合 必须用[i]获取每个tbody
table.rows;                             ---->所有行的数组
table.rows[table.rows.length-1]         ---->最后一行
var newTd=row.insertCell(i);            ---->最后一个单元格
tr.deleteCell(i);                       ---->删除单元格
tr.cells;                               ---->一行中所有格的数组
tr.cells[row.cells.length-1];           ---->一行中最后一单元格
tr.rowIndex;---专用于删除行             ---->行下标
cell.cellIndex                          ---->当前单元格的下标
Form
var form=document.forms[下标/"name"/"id"]
var elem=form.elements[i];
var elem/elems=form.name属性值/form["name属性值"]
select
var option=new Option(innerHTML,value);select.add(option);   --->增加option
Option:select.remove(option.index);                          --->删除option
封装了所有option对象
select.remove(select.options.length-1);                      ---->删除最后一个选项

cookie

cookie:document.cookie="key=value;expires="+date  --->创建
cookie:document.cookie                            --->读取

节点树 和 元素树

parentNode              parentElement
childNodes              children
lastChild               lastElementChild
firstChild              firstElementChild
previousSibling         previousElementSibling
nextSibling             nextElementSibling

javascript思维导图

1.javascript变量

javascript变量.jpg

2.javascript运算符

javascript运算符.jpg

3.javascript数组

javascript数组.jpg

4.javascript流程语句

javascript流程语句.jpg

5.javascript字符串函数

javascript字符串函数.jpg

6.javascript函数基础

javascript函数基础.jpg

7.javascript DOM操作

javascriptdom操作.jpg

8.javascript正则表达式

javascript正则表达式.jpg

注:以上思维导图均摘自其他网站,用来共享学习

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,185评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,445评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,684评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,564评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,681评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,874评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,025评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,761评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,217评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,545评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,694评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,351评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,988评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,778评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,007评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,427评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,580评论 2 349

推荐阅读更多精彩内容

  • 有人说过,很多弯路到最后都成了直路,所有的坑到最后也都成了坦途;所谓的直路和坦途并不是摆在眼前的,都是不断的的...
    老衲法号一眉道人阅读 1,321评论 0 4
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,219评论 0 4
  • 一岁一个月:你开始了真正的独立行走;第一次走出省界去襄阳;第一次感冒咳嗽;画出了人生第一幅作品~~~ 一岁两个月:...
    Shealy222阅读 214评论 0 1
  • 有心思写这段经历已经很久了,甚至题目打下都搁置了很长一段时间,但迟迟拖延,今天终于下定决心,就此起笔~~ 首先想感...
    桃成蹊_a0f2阅读 1,579评论 2 5
  • 亲爱的孩子: 作为一个父亲,还没有考虑过给你取一个什么名字,因为你也还没有来到这个世上,又不能确定你的性别,所以就...
    残剑阅读 316评论 1 1