JavaScript基础知识

1.比较运算符

(1)== 和 ===

‘==’会自动转换数据类型再比较;

‘===’不会自动转换数据类型,如果数据类型不一致,返回false;

(2)NaN

这个特殊的Number与所有其他值都不相等,包括它自己,

判断方法:isNaN(NaN);//true

(3)浮点数相等比较

浮点数在运算过程中会产生误差,因为计算机无法精确表示无限循环小数。要比较两个浮点数是否相等,只能计算它们之差的绝对值,看是否小于某个阈值。

Math.abs(1/3- (1-2/3)) <0.0000001;//true

(4)null和undefined

null表示一个“空”的值,它和0以及空字符串''不同,0是一个数值,''表示长度为0的字符串,而null表示“空”。

undefined,它表示“未定义”,undefined仅仅在判断函数参数是否传递的情况下有用。

2.操作字符串

toUpperCase   toLowerCase  

indexof() : 搜索指定字符串出现的位置

substring() : 返回指定索引区间的子串

3.数组方法

indexOf() :搜索一个指定的元素;

slice() : 截取Array的部分元素,然后返回一个新的Array,如果不给slice()传递任何参数,它就会从头到尾截取所有元素;

push()和pop()

unshift()和shift()

sort()排序

reverse()反转

splice()方法是修改Array的“万能方法”,它可以从指定的索引开始删除若干元素,然后再从该位置添加若干元素;

concat()方法把当前的Array和另一个Array连接起来,并返回一个新的Array;

join()方法把当前Array的每个元素都用指定的字符串连接起来,然后返回连接后的字符串;

4.对象

对象是一种无序的集合数据类型,它由若干键值对组成。

判断对象是否拥有某一属性:

in :in判断一个属性存在,这个属性不一定是xiaoming的,它可能是xiaoming继承得到的;

hasOwnProperty :要判断一个属性是否是xiaoming自身拥有的,而不是继承得到的,可以用hasOwnProperty()方法;

5.JavaScript把null、undefined、0、NaN和空字符串''视为false,其他值一概视为true

6.循环

(1)for ..in

可以把一个对象的所有属性依次循环出来;要过滤掉对象继承的属性,用hasOwnProperty()来实现.

for ... in循环可以直接循环出Array的索引;

7.Map 和 Set

Map是一组键值对的结构,具有极快的查找速度;

varm =newMap([['Michael',95], ['Bob',75], ['Tracy',85]]);

m.get('Michael');// 95

初始化Map需要一个二维数组,或者直接初始化一个空Map;

varm =newMap();// 空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

由于一个key只能对应一个value,所以,多次对一个key放入value,后面的值会把前面的值冲掉;

Set和Map类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在Set中,没有重复的key;

重复元素在Set中自动被过滤:有add和delete方法。

8.iterable

具有iterable类型的集合可以通过新的for ... of循环来遍历,Array、Map和Set都属于iterable类型;

a.forEach(function (element, index, array) {

    // element: 指向当前元素的值

    // index: 指向当前索引

    // array: 指向Array对象本身

    console.log(element + ', index = ' + index);

});

9.arguments,它只在函数内部起作用,并且永远指向当前函数的调用者传入的所有参数;

const与let都具有块级作用域;

10.解构赋值

可以同时对一组变量进行赋值,对数组元素进行解构赋值时,多个变量要用[...]括起来;

let[x, [y, z]] = ['hello', ['JavaScript','ES6']];

11.apply()和call()

要指定函数的this指向哪个对象,可以用函数本身的apply方法,它接收两个参数,第一个参数就是需要绑定的this变量,第二个参数是Array,表示函数本身的参数;

apply()把参数打包成Array再传入;

call()把参数按顺序传入

12.高阶函数

一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数

(1)map/reduce

由于map()方法定义在JavaScript的Array中,我们调用Array的map()方法,传入我们自己的函数,就得到了一个新的Array作为结果;

Array的reduce()把一个函数作用在这个Array的[x1, x2, x3...]上,这个函数必须接收两个参数,reduce()把结果继续和序列的下一个元素做累积计算;

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

(2)filter

filter()把传入的函数依次作用于每个元素,然后根据返回值是true还是false决定保留还是丢弃该元素;

(3)sort

13.闭包

函数作为返回值;

返回闭包时牢记的一点就是:返回函数不要引用任何循环变量,或者后续会发生变化的变量;

如果一定要引用循环变量怎么办?方法是再创建一个函数,用该函数的参数绑定循环变量当前的值,无论该循环变量后续如何更改,已绑定到函数参数的值不变;

借助闭包,可以封装一个私有变量;

闭包可以把多参数的函数变成单参数的函数;

14.箭头函数  x => x * x

箭头函数相当于匿名函数,并且简化了函数定义。箭头函数有两种格式,一种像上面的,只包含一个表达式,连{ ... }和return都省略掉了。还有一种可以包含多条语句,这时候就不能省略{ ... }和return:

x => {if(x >0) {returnx * x; }else{return- x * x; }}

15.generator

一个generator看上去像一个函数,但可以返回多次;

function* foo(x) {yieldx +1;yieldx +2;returnx +3;}

16.标准对象

几个规范:

1)不要使用new Number()、new Boolean()、new String()创建包装对象;

2)用parseInt()或parseFloat()来转换任意类型到number;

3)用String()来转换任意类型到string,或者直接调用某个对象的toString()方法;

4)通常不必把任意类型转换为boolean再判断,因为可以直接写if (myVar) {...};

5)typeof操作符可以判断出number、boolean、string、function和undefined;

6)判断Array要使用Array.isArray(arr);

7)判断null请使用myVar === null;

8)判断某个全局变量是否存在用typeof window.myVar === 'undefined';

9)函数内部判断某个变量是否存在用typeof myVar === 'undefined'。

Date、RegExp、JSON

将JavaScript对象序列化为JSON对象,JSON.Stringify();将JSON对象反序列化为JavaScript对象,JSON.parse()

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

推荐阅读更多精彩内容

  • 注:本文所有知识点总结或摘抄自廖雪峰javascript教程,点击查看更详细的讲解。 1.javascript简介...
    hanyuntao阅读 524评论 0 13
  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 4,148评论 0 13
  • JavaScript 简介 1. 前端技术的三大核心 HTML、CSS 和 JavaScript。HTML 控制...
    工具速递阅读 1,665评论 7 5
  • 快速学习得走心,走脑!读一本书首先要看一下目录,看一下这本书的结构,之后在大量泛读,入脑去沉淀这些知识!不...
    wh王辉阅读 59评论 0 0
  • 她兀地从床上直起身子,窗帘没有拉严实,黑暗中一抹寂静的月光洒在虚掩的门上,她走下床,地面伴随着她沉重的心跳嘎吱嘎吱...
    PirateYan阅读 229评论 0 0