.net 程序员应该知道的javascript 知识(1) : 基础篇 (持续更新中...)

  • 使用apply/call 来借用其它类型的方法.
    • js 是弱类型的.
    • 在Array 上定义的方法, array-like 对象也可以调用.
      • array-like 对象: 以正整数作为keys, 并且含有length 属性. arguments 就是一个类数组对象.
      • 过滤掉第一个参数: var args = Array.prototype.slice.call (arguments, 1);
    • 类似地, 其它对象上定义的方法, 只要是符合该对象的特征(含有特定的属性)的对象, 就可以调用方法.
  • use strict模式下, this默认为undefined.
  • NodeJs 中的console.assert 一个快捷方式, 等同于require('assert').ok.
    • 常用于验证方法的输入参数.
    • 使用var assert = console.assert; 来创建assert 快捷方式.
  • console. info / log 的唯一区别是在浏览器中, info消息会有i图标前缀.
  • 不支持关联数组, 对象的元素名称为string, 数组的元素名称只能为number.
    • 避免使用new Array(), 直接[].
      • 因为其第一个参数会有歧义: 第一个数字类型的元素/长度.
    • typeof 数组 返回 object.
  • call 的主要用途是绑定this.
    • 在继承链中, 在子类构造函数中调用父类构造时, super.constructor.apply(this).
    • 使用匿名函数给实例添加新方法, 并指定实例为this 直接调用之.
    • apply() 可以使用arguments 来代表所有的实参.
    • bind() 将当期context 绑定到方法上, 之后再调用该方法. 用于异步回调和事件.
  • Object.defineProperty.
    • 通过=赋值新增的属性,其所有的descriptor=true(可写,可枚举..).
    • 通过该函数新增的属性, 默认是immutable,其所有的descriptor=false.
    • descriptor 分为 data + access. 一个descriptor只能是其中之一(不能同时含有两边的属性)
    • 修改configurable =false的属性会得到TypeError.
    • 而修改writable = false的属性, 不会有任何效果,也没有异常.
    • 使用自定义的getter/setter 可以在属性被读写时实现额外的逻辑.
  • 变量的提升
    • var 会在作用域(全局,方法)内"占"位置(无论定义在作用域的何处).
    • 也就是无论在作用域的何处定义的var, 都等同于在作用域的开头定义的.
  • JS 对浮点数的判等, 使用差值小于一个足够小的数来进行.
  • 函数中的变量
    • 局部变量, 只能在函数里访问 var id;
    • 实例属性, 通过对象.访问 this.age;
    • 类属性, 类似static Person.name;
  • 函数的独立性.
    • 可以在A函数内定义B函数, 但是B函数还是独立于A函数(有不同的this).
  • 空参数会被当做undefined 传递.
    • 所以弱类型没有重载, 后面会覆盖前面的定义,无论参数个数.
  • 在类(函数)中定义函数会导致: 性能低下(每new一个类,都会生成一个函数); 产生闭包.
    • 使用prototype 来解决.
  • Cookie的局限性:
    • 大小限制为4KB;
    • 会被包含在每次HTTP请求中;
    • 网络传输未加密.
  • Web Storage: Session 和Local. 包含在window对象中.
  • Buffer. 类似于数组,其元素是16进制的两位数.
    • 将JS的数据处理能力从字符串扩展到了任意二进制数据.
    • 字符串是只读的, 而Buffer像数组.修改会作用于源Buffer.
    • Buffer 和字符串在制定编码后,可以互相转换.
  • a==null 写作 null == a 只是为了防御性编程, 防止少写一个=的情况.
  • undefined 代表只声明但未赋值的变量, 其类型为undefined.
    • null 是代表没有值的值, 类型为object.
    • if(!a) 来进行判断.
  • delete 只影响当前对象, 不会递归影响到继承链上.
    • 仅在删除不能被删除的自身属性时返回false.
  • prototype链的最顶端是null.
    • o ---> Object.prototype ---> null.
    • a ---> Array.prototype ---> Object.prototype ---> null.
    • f ---> Function.prototype ---> Object.prototype ---> null.
    • 当继承的方法被执行时,this指向的是当前对象(多态).
    • prototype 是构造函数的一个属性, 而proto指向了原型链.
      • ( new Foo ).__proto__ === Foo.prototype;
      • ( new Foo ).prototype === undefined;
  • 模块
    • NodeJS是参照CommonJS 规范实现的.
    • 而对于浏览器环境, 不能同步load(网速慢时假死), 只能AMD(异步模块定义).
      • require([module], callback);
      • 模块的加载不影响其后面语句的运行, 所有依赖于该模块的语句, 都定义在一个回调函数中. 在加载完毕后,才会运行回调.
  • 链式赋值而隐式创建全局变量
function foo(){
  // =的优先级是从右到左, 所以会先执行b=0; 所以b 变成了全局变量.
    var a=b=0;
}
function foo(){
    var a,b;// 均为局部变量.
}
  • 隐式创建的全局变量并不是真正的全局变量, 而只是全局对象的属性.
    • 通过delete 可以删除隐式创建的全局变量(delete 只能删除属性), 而不是删除明确定义的全局变量.
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,047评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,807评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,501评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,839评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,951评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,117评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,188评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,929评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,372评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,679评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,837评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,536评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,168评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,886评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,129评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,665评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,739评论 2 351

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,642评论 18 139
  • 【第二天早上】收获是自己努力的,也有小伙伴的互助。 【握紧拳头游戏】分享一下你刚刚的用了什么方法打开了伙伴的拳头?...
    范秀红阅读 553评论 0 2
  • 你知道吗?乳腺癌已經成为威胁女性健康的"头号杀手"了,随着經濟越來越發達,人们生活方式也隨之而改变,但是乳腺癌的发...
    mmmnibnn阅读 378评论 0 0
  • 文芾 风像一把剃须刀吹过我的脸和深秋的树 我的脸和树的脸干净得能看见皮下的骨骼在动 虽然我和树一直站着未曾说话 但...
    徐文显阅读 289评论 0 6
  • 有时候真的挺讨厌字体的 看不到表情 感受不到语气 有的只是无尽的猜测 真的挺累的
    叶公子哥哥阅读 90评论 0 0