一些js知识点

1、变量提升

提升声明,不提升赋值

2、所有的全局变量和函数都是绑定在window对象上的属性
3、命名空间是为了解决全局变量冲突的问题
4、var定义的变量,在for循环等语句块中没有局部作用域,for循环外边可以输出变量;let定义的变量,有块级作用域,只在作用域内有效;const 定义一个常量,只读;
5、解构·赋值
var person = {
    name: '小明',
    age: 20,
    gender: 'male',
    passport: 'G-12345678',
    school: 'No.4 middle school'
};
// 将passport值赋给id
let {name, passport:id} = person;
console.log(id); // 'G-12345678'
6、高阶函数
(1)arr.map(function)  // 把f(x)作用在Array的每一个元素并把结果生成一个新的Array
(2)arr.reduce(function) // reduce()把结果继续和序列的下一个元素做累积计算

练习:不要使用JavaScript内置的parseInt()函数,利用map和reduce操作实现一个string2int()函数

'use strict';
function string2int(s) {
  function str2num(str) {
     var strArr = str.split("");
     function toInt(data) {
       return +data;
     }
      return strArr.map(toInt);
  }
   var num = str2num(s);
   var res = num.reduce(function(x,y){
     return x*10+y;
   });
   return res;
}
// 测试:
if (string2int('0') === 0 && string2int('12345') === 12345 && string2int('12300') === 12300) {
    if (string2int.toString().indexOf('parseInt') !== -1) {
        console.log('请勿使用parseInt()!');
    } else if (string2int.toString().indexOf('Number') !== -1) {
        console.log('请勿使用Number()!');
    } else {
        console.log('测试通过!');
    }
}
else {
    console.log('测试失败!');
}

练习:请把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字。输入:['adam', 'LISA', 'barT'],输出:['Adam', 'Lisa', 'Bart']。

'use strict';
function normalize(arr) {
   var result = arr.map(function(x) {
     var first = x.slice(0,1).toUpperCase();
     var lower = x.slice(1).toLowerCase();
     return first+lower;
   })
   return result;
}
// 测试:
if (normalize(['adam', 'LISA', 'barT']).toString() === ['Adam', 'Lisa', 'Bart'].toString()) {
    console.log('测试通过!');
}else {
    console.log('测试失败!');
}

(3)arr.filter(function) 回调函数作用于arr的每个元素,根据返回值是false还是true决定保留还是过滤掉。回调函数可以节后三个参数(数组的每一个元素,index, arr本身)
练习:请尝试用filter()筛选出素数

'use strict';
function get_primes(arr) {
    function isPrimeNumber(x) {
        if(x===1) {
            return false;//1不是素数,返回false
        }
        //i是2到x开平方根之间的整数
        //如果x对i取余等于0,则不是素数,返回false
        for(let i=2;i<=Math.sqrt(x,2);i++) {
            if(x%i===0) {
                return false;
            }
        }
        //如果上述条件都不满足,则是素数,返回true
        return true;
    }
    //用filter()返回新的只含有素数的数组
    return arr.filter(isPrimeNumber);
}
// 测试:
var
    x,
    r,
    arr = [];
for (x = 1; x < 100; x++) {
    arr.push(x);
}
r = get_primes(arr);
if (r.toString() === [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97].toString()) {
    console.log('测试通过!');
} else {
    console.log('测试失败: ' + r.toString());
} 

(4)arr.sort()方法法默认把所有元素先转换为String再排序,会直接对Array进行修改
(5)every()方法可以判断数组的所有元素是否满足测试条件。
(6)find()方法用于查找符合条件的第一个元素,如果找到了,返回这个元素,否则,返回undefined:
(7)findIndex()和find()类似,也是查找符合条件的第一个元素,不同之处在于findIndex()会返回这个元素的索引,如果没有找到,返回-1:
(8)forEach()和map()类似,它也把每个元素依次作用于传入的函数,但不会返回新的数组。forEach()常用于遍历数组,因此,传入的函数不需要返回值;

7、箭头函数

如果函数表达式只有一句可以省略{......}和return;如果多个语句不能省略;

8、面向对象编程

(1)在JS中没有class类的概念,所有的对象都是实例,继承关系就是一个对象的原型指向另一个对象。
(2)创建对象 Object.create()
(3)原型对象才有prototype(原型)属性,新创建的对象没有。

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