JavaScript笔记


数组:

var arr = [10, 20, '30', 'xyz'];
    arr.length;//num
    arr.indexOf(10);     //返回引索位置
    arr.match(RegEx);     //匹配正则返回匹配成功的字符,或者查找某一个指定的值并返回找到的值
      PS: 匹配正则时若匹配多个字符时,返回值为一个数组,数组的[0]为匹配文本,后面的是子文本。
    arr.slice(0, 3);     //截取部分元素组成一个新的数组
                            [10,20,'30']
    arr.push('a','b');   //在末尾加上相应元素
    arr.find();          //在数组中查找第一个满足指定测试的值
    arr.pop();           //返回最后一个元素并删除
    arr.unshift('a', 'b');//在头部加上一些元素
    arr.shift();          //删掉第一个元素
    arr.sort();           //排序,按ascii值小到大,并非数字大小
    arr.sort(function (a,b) { return a>b?-1:1;  });
      //  对数字排序
    arr.reverse();        //反转
    arr.splice(1, 2);     //从指定位置开始删除或添加元素
    arr=arr.concat(arr2);     //连接两个数组
    arr.join(',');        //用指定字符连接元素

字符串:

var message = '你好, ' + name + ', 你今年' + age + '岁了!';
     //或者var message = `你好, ${name}, 你今年${age}岁了!`;
     s.toLowerCase();     //转换为小写
     s.toUpperCase();     //转换为大写
     s.substring(0,5);    //返回指定区间子串
     '\'  为转换符-----'I\'m \"OK\"!';
类型转换:
var number='a';
number.charCodeAt();   //97  字符转换为ascii
String.fromCharCode(96);  //'a'  ascii转换为字符

String(12);  //'12'  转换为字符串
Number('12'); // 12  转换为数字
Number('ab');//NaN 

var str=[1,2,3];
str.toString();  //"1,2,3"  转换为字符串对象,等价于String(str)
Number((0.8-0.6).toFixed(1)); //0.2
     //在js中对于浮点的运算默认精度为循环小数0.8-0.6=0.2000000001;
     //要进行转换,toFixed(1),保留一位小数
对象:
var xiaoming = {
    name: '小明'
};
xiaoming.age; // undefined
xiaoming.age = 18; // 新增一个age属性
xiaoming.age; // 18
xiaoming.hasOwnProperty('name');//对象中是否有某一属性
xiaoming['属性名为变量']=1;   //给对象添加一个属性及键值
delete xiaoming.age; // 删除age属性
xiaoming.age; // undefined
delete xiaoming['name']; // 删除name属性
xiaoming.name; // undefined
delete xiaoming.school; // 删除一个不存在的school属性也不会报错

'name'  in xiaoming;//------------对象中是否存在某个属性

循环

for...in------------------------循环一个对象所有属性
eg:

var o = {
    name: 'Jack',
    age: 20,
    city: 'Beijing'
};
for (var key in o) {
    alert(key); // 'name', 'age', 'city'
}

Map

Map是一组键值对的结构,具有极快的查找速度。
结构为:Map( [ [ key, value], [ key, value],...... [ key, value] ])

var m = new Map([['Michael', 95], ['Bob', 75], ['Tracy', 85]]);
m.get('Michael'); // 95

Map的方法有set---添加、has---存在?、get---获得、delete---删除

var m = new Map(); // 空Map
m.set('Adam', 67); // 添加新的key-value
m.set('Bob', 59);
m.has('Adam'); // 是否存在key 'Adam': true
m.get('Adam'); // 67
m.delete('Adam'); // 删除key 'Adam'
m.get('Adam'); // undefined

for...of循环遍历集合

var a = ['A', 'B', 'C'];
var s = new Set(['A', 'B', 'C']);
var m = new Map([[1, 'x'], [2, 'y'], [3, 'z']]);
for (var x of a) { // 遍历Array
    alert(x);
}
for (var x of s) { // 遍历Set
    alert(x);
}
for (var x of m) { // 遍历Map
    alert(x[0] + '=' + x[1]);
}

forEach方法

var a = ['A', 'B', 'C'];
a.forEach(function (element, index, array) {
    // element: 指向当前元素的值
    // index: 指向当前索引
    // array: 指向Array对象本身
    alert(element);
});//依次输出'A', 'B', 'C'

注意

  • 名字是不固定,但是位置是固定的,如果只关心element,那么给forEach一个参数就可以,如果需要index,那么就要给两个参数,如果需要array,就要给三个,也就是这三个参数的含义是定好的。

函数

arguments——关键字,指向当前函数传入的所有参数,类似Array。
常被用来:
获取参数长度:arguments.length;
获取具体参数:arguments[ i ];

rest参数——接受所有传入参数但在function中没有写出来的参数,类似array。
eg:计算很多参数的和

function sum(...rest){
    if( arguments.length===0){
        return 0;
    }
    var sum=0;
    for(var i of rest){
        sum = sum+i;
    }
    return sum;
}

高阶函数

map

对数组中每一个元素(字符串、数字、对象)操作
实例
对数组的处理

function pow(x) {
    return x * x;
}

var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
arr.map(pow); // [1, 4, 9, 16, 25, 36, 49, 64, 81]

重新格式化数组中的对象

var kvArray = [{key: 1, value: 10}, 
               {key: 2, value: 20}, 
               {key: 3, value: 30}];

var reformattedArray = kvArray.map(function(obj) { 
   var rObj = {};
   rObj[obj.key] = obj.value;
   return rObj;
});

// reformattedArray is now [{1: 10}, {2: 20}, {3: 30}], 

// kvArray is still: 
// [{key: 1, value: 10}, 
//  {key: 2, value: 20}, 
//  {key: 3, value: 30}]
reduce

这个函数必须接收两个参数,reduce()把结果继续和序列的下一个元素做累积计算,其效果就是:

arr = [x1, x2, x3, x4];
arr.reduce(f) = f(f(f(x1, x2), x3), x4)

实例 (求和)

var arr = [1, 3, 5, 7, 9];
arr.reduce(function (x, y) {
    return x + y;
}); // 25

reduce的完整句法是 arr.reduce( callback, [ initiaValue])

  • 其中callback可接受四个参数(括起来),分别是:
    accumulator当前累积值
    currentValue是正在处理的当前元素
    currentIndex是当前元素的索引
    array是被处理的数组。参数的位置是固定的,名称随便取。
  • 其中[initiaValue]用做第一个参数的值。如果要reduce之后的返回是一个数组,则要写成‘[]’否则会报错。
filter

与map和reduce结构类似,根据返回值的true/false过滤一些元素

var arr = [1, 2, 4, 5, 6, 9, 10, 15];
var r = arr.filter(function (x) {
    return x % 2 !== 0;
});
r; // [1, 5, 9, 15]
sort

排序,简单形式arr.sort();//按ASCII来排序。也可以写出高阶的形式,定义它的排序方法。
实例(降序)

var arr = [10, 20, 1, 2];
arr.sort(function (x, y) {
    if (x < y) {
        return 1;
    }
    if (x > y) {
        return -1;
    }
    return 0;
}); // [20, 10, 2, 1]

jQuery

jQuery是一个被广泛应用的库,将所有功能封装在jQuery这个全局变量中。
$ ===jQuery;

基本选择器
1、id选择器

// 查找<div id="abc">:
var div = $('#abc');

2、按标签查找

var ps = $('p'); // 返回所有<p>节点
ps.length; // 数一数页面有多少个<p>节点

3、类选择器

var a = $('.red'); // 所有节点包含`class="red"`都将返回
// 例如:
// <div class="red">...</div>
// <p class="green red">...</p>

当一个结点有多个class时

var a = $('.red.green'); // 注意没有空格!
// 符合条件的节点:
// <div class="red green">...</div>
// <div class="blue green red">...</div>

4、按属性查找:
id和class都可以称作属性,除此之外还有其他如name/p等
^——开头
$——结尾

var icons = $('[name^=icon]'); // 找出所有name属性值以icon开头的DOM
// 例如: name="icon-1", name="icon-2"
var names = $('[name$=with]'); // 找出所有name属性值以with结尾的DOM
// 例如: name="startswith", name="endswith"

5、组合查找

var emailInput = $('input[name=email]'); 
// 不会找出<div name="email">,只会选择input中的元素

6、多项选择器
用“,”组合起来

$('p.red,p.green'); // 把<p class="red">和<p class="green">都选出来

层级选择器
如果两个元素之间具有层级关系,可以用空格隔开来表示(从上到下)。

子选择器:如果层级关系是父子关系,则用‘>’来连接

$('ul.lang li');
$('ul.lang>li.lang-javascript'); // 可以选出[<li class="lang-javascript">JavaScript</li>]

函数
find() //查找某结点的指定子节点
parent() //查找其上层结点
next() //下一个
prev() //上一个
filter() //过滤符合条件的结点
map() //对若干结点进行操作,参见map的用法
first() ;//获取第一个结点
last(); //获取最后一个结点
slice(); //参见js的一些基本用法

可以看看JSON的相关内容,经常会用的
学习网站JSON--W3school
等等等

应用
用jQuery获取结点之后呢?就可以对结点进行操作,如:修改结点内容、更改结点的CSS样式、获取结点信息、操作表单、添加/删除结点等等。
详情可参考廖雪峰的教程

事件
一般用于与用户的交互,事件一般是鼠标或键盘的响应。

鼠标事件
click: 鼠标单击时触发;
dblclick:鼠标双击时触发;
mouseenter:鼠标进入时触发;
mouseleave:鼠标移出时触发;
mousemove:鼠标在DOM内部移动时触发;
hover:鼠标进入和退出时触发两个函数,相当于mouseenter加上mouseleave。
例如:

a.on('click', function () {
    alert('Hello!');
});
//或者
a.click(function(){
  ……
});
//on方法用来绑定一个事件,我们需要传入事件名称和对应的处理函数。

键盘事件
键盘事件仅作用在当前焦点的DOM上,通常是<input>和<textarea>。
keydown:键盘按下时触发;
keyup:键盘松开时触发;
keypress:按一次键后触发。

其他常用事件
submit:当<form>提交时触发
ready:当页面被载入并且DOM树完成初始化后触发,可用来写其他的初始化。

PS: ready事件可直接写
$(function () {
    // init...
});

change:当<input> ,<select>, <textarea>的内容改变是触发
focus:当DOM获得焦点时触发;
blur:当DOM失去焦点时触发;

动画
原理非常简单:我们只需要以固定的时间间隔(例如,0.1秒),每次把DOM元素的CSS样式修改一点(例如,高宽各增加10%),看起来就像动画了。

var div = $('#test');
div.hide(3000);//在3秒内消失
div.show('slow'); //在0.6内显示
div.toggle();//根据当前状态决定的英文show()还是hide()。
div.slideUp(3000); // 在3秒钟内逐渐向上消失
div.slideDown(3000); // 在3秒钟内逐渐向上出现
div.fadeOut('slow'); // 在0.6秒内淡出

其他

var a = prompt("......"); //输出“......”,并用a获取需要输入的值
typeof(a); //获取数值类型

apply与call的用法

两者都是为了动态改变this而出现的,区别在于接受参数的方式不同,call需要把参数按顺序传递进去,而apply则是把参数放在数组里传递。

var func = function(arg1, arg2) {
};

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

推荐阅读更多精彩内容

  • JavaScript 将字符串转换为数字 parseInt() ◆只保留数字的整数部分,不会进行四舍五入运算。 ...
    AkaTBS阅读 975评论 0 9
  • JS基础讲解 JavaScript组成ECMAScript:解释器、翻译DOM:Document Object M...
    FConfidence阅读 567评论 0 1
  • 代码笔记 JavaScript 封装自己的log函数 eg普通封装var log = function() { ...
    本大少_阅读 307评论 0 0
  • 最近在复习之前学过的JavaScript,现在把笔记整理一下 数据类型 整数和浮点数 不区分整形和浮点数,统一使用...
    夜玉龙阅读 314评论 0 1
  • 3. 标准库 3.1Object对象 3.1.1概述 js提供一个Object对象,所有其他对象都继承自它。Obj...
    暗夜的怒吼阅读 579评论 0 3