JS作用域是基于词法作用域的顶级对象。

JS是一门弱类型语言,强类型能在编译时检测错误。

JS是唯一一门所有浏览器都能识别的语言。

块注释对于被注释的代码是不安全的,例如/*  var rm=/a*/.match(s);  */

JS只有一个数字类型,没有分离出整数类型,完全避免了短整型的溢出问题。

NaN不等于任何值,包括他自己。

JS所有字符都是16位。

JS允许数组包含任意类型的值。

字符串是不可变的,一旦被创建,永远无法改变它,但是可以通过+运算符连接其他字符串来创建一个新字符串。

2个包含着完全相同的字符且字符顺序也相同的字符串被认为是相同的字符串,所以'c'+'a'==='ca'是true

switch,while,for,do语句配合break语句来使用。

falsy的值:

  • false
  • null
  • undefined
  • 空字符串''
  • 数字0
  • 数字NaN

其他都被当做真。

for in会枚举一个对象的所有属性名(键名),需要object.hasOwnProperty(variable)来确定这个属性名是该变量对象的成员还是来自原型链。

do在代码块执行后再检测,while在执行前检测。

+运算符可以进行加法运算或字符串连接。如果想加法运算,两个运算数都得是数字。

如果第1个运算数的值为假,运算符&&产生第1个运算数的值,否则产生第2个运算数的值。

如果第1个运算数的值为真,运算符||产生第1个运算数的值,否则产生第2个运算数的值。

JS简单数据类型包括数字,字符串,布尔值,null值,undefined值,其他所有的值都是对象。

检索方式:

  • []
  • .(优先考虑)

如果字符串是合法的JS标识符且不是保留字,那么也可以用.来检索。

||可以填充默认值:var middle=stooge["middle-name"]||"(none)";

对象里的值可以通过赋值语句来更新,如果属性名已存在对象里,那么这个属性的值就会被替换。如果对象之前没有那个属性名,那么该属性就扩充到对象中。

Object.create()可以创建一个使用原对象作为其原型的新对象。

delete运算符可以用来删除对象的属性。如果对象包含该属性,那么该属性会被移除。它不会触及原型链中的任何对象。删除对象的属性可能会让来自原型链中的属性透显出来。

对象字面量产生的对象连接到Object.prototype。函数对象连接到Function.prototype。每个函数在创建时会附加2个隐藏属性:函数上下文和实现函数的代码。

当实参的个数>形参的个数,超出的参数值被忽略。

当实参的个数<形参的个数,缺失的参数值被替换为undefined。

  1. 方法调用模式。就是一个函数被保存为对象的一个属性。当一个方法被调用时,this被绑定到该对象。this到对象的绑定发生在调用的时候。
  2. 函数调用模式。this被绑定到全局对象,可以通过定义一个变量that保存this。
  3. 构造器调用模式。如果在一个函数前面加上new来调用,会创建一个连接到该函数的prototype成员的新对象,同时this被绑定到那个新对象上。
  4. apply调用模式。apply接收2个参数,第1个是要绑定给this的值,第2个是一个参数数组。

当函数被调用,可以通过arguments数组来访问到所有它被调用时传递给它的参数列表。(包括实参>形参,超出的实参)

throw语句中断函数的执行,它会抛出一个exception对象,该对象包含一个用来识别异常类型的name属性和message属性。这个exception对象会被传递到try的catch从句。

var add=function (a,b){

throw{

name:'TypeError',

message:'add needs numbers'

};

}

var try_it=function(){

try{

add('7');

}cache(e){

document.write(e.name+':'+e.message);

}

}

移除首尾空格的方法:

String.method('trim',function(){

return this.replace(/^\s+|\s+$/g,'');

}

要确定没有该方法时才添加方法:Function.prototype.method=function(name,func){}

使用函数和闭包来构造模块。

级联可以在一个语句中一次调用同一个对象的很多方法。A.().B().C()

柯里化(局部套用),把多参数函数转换为一系列单参数函数并进行调用的技术。

记忆:将先前的操作结果记录在某个对象里,避免无谓的重复计算。比如斐波那契数列。

优化前:

var fib=function(n){

return n<2?n:fib(n-1)+fib(n-2);

}

for(var i=0;i<=10;i++){

console.log(fib(i));

}

优化后:

var memoizer=function(memo,formula){

var fib=function(n){

var result=memo[n];

if(typeof result !=='number'){

result=fib(n-1)+fib(n-2);

memo[n]=result;

}

return result;

};

return fib;

};

var fibb=memoizer([0,1],function(fib,n){

return fib(n-1)+fib(n-2);

});

当一个函数对象被创建时,构造器产生的函数对象赋予一个prototype属性,它的值是一个包含constructor属性且属性值为该新函数的对象。

用new调用一个函数时,函数执行方式:1.创建一个新对象,继承自构造器函数的原型对象 2.调用构造器函数,绑定this到新对象上 3.如果它的返回值不是一个对象,就返回该新对象。

差异化继承:

var myMammal={

name:'hello',

get_name:funcrion(){

return this.name;

},

says:function(){

return this.saying||'';

}

}

var myCat=Object.create(myMammal);

myCat.name='world';

myCat.saying='meow';

数组的长度length:length的属性值时这个数组的最大整数属性名+1,它不一定等于数组里的属性个数。arr[100001]=true; arr.length//100002

设置更大的length不会为数组分配更多的空间,设置更小的length会把>=新length的属性删除。

for in遍历无法保证顺序,而且在原型上加扩展方法会被for in出来。所以最好用hasOwnProperty()判断。

//    var arr={
    //        3:1,
    //        42:2,
    //        11:3
    //    }
    //    for(var key in arr){
    //        console.log(arr[key]);
    //    }
    Object.prototype.say='hello';
    var arr={
        "name":"zyy"
    }
    for(var key in arr){
        console.log(key+' '+arr[key]);
    }
判断是否是数组:
var is_arr=function(value){
 return value&&typeof value==='object'&&value.constructor===Array;
}
 
array.concat(item):包含一份array的浅拷贝并把参数附加其后。【不会修改array】
array.join(分隔符):先把array中每个元素构造成一个字符串,然后用分隔符把他们连接在一起。【速度比+更快】
array.pop():移除最后一个元素并返回,如果为空返回undefined。
array.push(item...):把参数附加到数组尾部【会修改array】
array.reverse():反转array里元素顺序,并返回array本身。
array.shift():移除数组第1个元素,并返回删除元素。如果空返回undefined。
array.slice(start,end):对array中的一段做浅拷贝,end可选。可以是负数。
array.sort():在比较时候会自动转为字符串类型,sort根据不同浏览器稳定性不一样。
array.splice(start,deleteCount,item...):
array.unshift(item...):把元素添加到数组头部。返回新length
 
number.toExponential():把number转成一个指数形式的字符串。
number.toFixed():转换成十进制形式的字符串。
number.toPrecision():
number.toString()
 
object.hasOwnProperty(name):如果object包含一个名为name的属性,返回true.原型链中同名属性不会被检查。
 
string.charAt(pos):返回在pos处的字符,返回的是个字符串。如果0<pos<string.length,返回空字符串
string.charCodeAt(pos):返回pos处的字符码位,如果0<pos<string.length,返回NaN
string.concat(string...):拼接字符串
string.indexOf(SearchString,pos):在string字符串查找searchString,返回匹配第一个字符的位置。pos可选。
string.lastIndexOf():类似
string.replace(searchValue,replaceValue):对string进行查找和替换,返回一个新字符串。
string.slice(start,end):同array
string.split(separator,limit):把string分割成片段创建一个字符串数组。limit限制被分割的片段数量。
string.toLowerCase():全小写
string.toUpperCase():全大写。
 
NaN===NaN返回false
NaN!==NaN返回true
 
 
==和!=如果两个运算数是不同的类型,它们就会试图转换值的类型。
'' == '0'  //false
0 == ''    //true
false == 'false'  //false
false == '0'    //true
false == undefined  //false
false == null //false
null == undefined //true
' \t\r\n ' == 0  //true
 
 

学习笔记——JS语言精粹的更多相关文章

  1. [java学习笔记]java语言核心----面向对象之this关键字

    一.this关键字 体现:当成员变量和函数的局部变量重名时,可以使用this关键字来区别:在构造函数中调用其它构造函数 原理:         代表的是当前对象.         this就是所在函数 ...

  2. [java学习笔记]java语言核心----面向对象之构造函数

    1.构造函数概念 特点: 函数名与类名相同 不用定义返回值类型 没有具体的返回值 作用:                给对象进行初始化 注意: 默认构造函数 多个构造函数是以重载出现的 一个类中如果 ...

  3. Java学习笔记:语言基础

    Java学习笔记:语言基础 2014-1-31   最近开始学习Java,目的倒不在于想深入的掌握Java开发,而是想了解Java的基本语法,可以阅读Java源代码,从而拓展一些知识面.同时为学习An ...

  4. IOS学习笔记07---C语言函数-printf函数

    IOS学习笔记07---C语言函数-printf函数 0 7.C语言5-printf函数 ------------------------- ----------------------------- ...

  5. IOS学习笔记06---C语言函数

    IOS学习笔记06---C语言函数 --------------------------------------------  qq交流群:创梦技术交流群:251572072              ...

  6. amazeui学习笔记--js插件(UI增强)--警告框Alert

    amazeui学习笔记--js插件(UI增强)--警告框Alert 一.总结 1.警告框基本样式:用am-alert声明div容器, <div class="am-alert" ...

  7. amazeui学习笔记--js插件(UI增强4)--下拉组件Dropdown

    amazeui学习笔记--js插件(UI增强4)--下拉组件Dropdown 一.总结 1.am-dropdown(及其孩子):控制下拉列表的样式 2.data-am-dropdown(及其孩子):控 ...

  8. amazeui学习笔记--js插件(UI增强3)--折叠面板Collapse

    amazeui学习笔记--js插件(UI增强3)--折叠面板Collapse 一.总结 注意点: 1.data-am-collapse:这个东西就是展开折叠事件 2.am-collapse(包括其下属 ...

  9. amazeui学习笔记--js插件(UI增强2)--按钮交互Button

    amazeui学习笔记--js插件(UI增强2)--按钮交互Button 一.总结 1.按钮loading状态: <button type="button" class=&q ...

随机推荐

  1. Spring第四天,BeanPostProcessor源码分析,彻底搞懂IOC注入及注解优先级问题!

  2. NAT基本原理及应用

    参考链接 https://blog.csdn.net/u013597671/article/details/74275852

  3. 防sql注入函数

  4. 探究:nuget工具对不再使用的dll文件的处理策略

    背景介绍 nuget是.net平台有效的包管理工具,相信每个C#开发者对它都不陌生. 本文我们来探究一下nuget对不再使用的dll文件的处理策略,分为如下2个场景: 场景A:包A1.0原来包含New ...

  5. 深度分析:mybatis的底层实现原理,看完你学会了吗?

    前言 最近在和粉丝聊天的时候被粉丝问到jdbc和mybatis底层实现这一块的问题,而且还不止一个小伙伴问到,于是我似乎认识到了问题的严重性,我花了两天时间整理了一下自己的认识和网上查阅的资料写了这篇 ...

  6. Docker这么火爆。章节一:带你详尽了解Docker容器的介绍及使用

    前言 很多小伙伴可能在工作中都听说过Docker,但是实际工作中却没有使用过,听得多了,也对Docker内心有一种很深切的想了解,但是因为各种原因而不知道如何去了解而发愁,不要急,这篇文章带你认识Do ...

  7. 攻克弹唱第九课(如何运用好G大调和弦)

    在本期文章中,笔者将使用guitar pro7软件与大家分享如何运用好G大调音阶的经验. 众所周知,在我们学习吉他的过程中,先从C大调开始,再以G大调为深入,然后才走过入门的阶段.很多朋友都觉得自己对 ...

  8. FL Studio入门:如何使用Layer插件叠加音色

    Layer控制器也是FL Studio中一个特别有用的插件,主要用来叠加音色,以及通过Layer通道来控制多个打击乐通道. 下面我们一起来看看叠加音色是怎么做出来的. 1.新建一个空白工程,插入3个3 ...

  9. Python Api接口自动化测试框架 代码写用例

    公司新来两个妹子一直吐槽这个接口测试用例用excel维护起来十分费脑费事,而且比较low(内心十分赞同但是不能推翻自己),妹子说excel本来就很麻烦的工具,于是偷偷的进行了二次改版. 变更内容如下: ...

  10. bash反弹shell检测

    1.进程 file descriptor 异常检测 检测 file descriptor 是否指向一个socket 以重定向+/dev/tcp Bash反弹Shell攻击方式为例,这类反弹shell的 ...