学习笔记——JS语言精粹
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。
- 方法调用模式。就是一个函数被保存为对象的一个属性。当一个方法被调用时,this被绑定到该对象。this到对象的绑定发生在调用的时候。
- 函数调用模式。this被绑定到全局对象,可以通过定义一个变量that保存this。
- 构造器调用模式。如果在一个函数前面加上new来调用,会创建一个连接到该函数的prototype成员的新对象,同时this被绑定到那个新对象上。
- 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()判断。
学习笔记——JS语言精粹的更多相关文章
- [java学习笔记]java语言核心----面向对象之this关键字
一.this关键字 体现:当成员变量和函数的局部变量重名时,可以使用this关键字来区别:在构造函数中调用其它构造函数 原理: 代表的是当前对象. this就是所在函数 ...
- [java学习笔记]java语言核心----面向对象之构造函数
1.构造函数概念 特点: 函数名与类名相同 不用定义返回值类型 没有具体的返回值 作用: 给对象进行初始化 注意: 默认构造函数 多个构造函数是以重载出现的 一个类中如果 ...
- Java学习笔记:语言基础
Java学习笔记:语言基础 2014-1-31 最近开始学习Java,目的倒不在于想深入的掌握Java开发,而是想了解Java的基本语法,可以阅读Java源代码,从而拓展一些知识面.同时为学习An ...
- IOS学习笔记07---C语言函数-printf函数
IOS学习笔记07---C语言函数-printf函数 0 7.C语言5-printf函数 ------------------------- ----------------------------- ...
- IOS学习笔记06---C语言函数
IOS学习笔记06---C语言函数 -------------------------------------------- qq交流群:创梦技术交流群:251572072 ...
- amazeui学习笔记--js插件(UI增强)--警告框Alert
amazeui学习笔记--js插件(UI增强)--警告框Alert 一.总结 1.警告框基本样式:用am-alert声明div容器, <div class="am-alert" ...
- amazeui学习笔记--js插件(UI增强4)--下拉组件Dropdown
amazeui学习笔记--js插件(UI增强4)--下拉组件Dropdown 一.总结 1.am-dropdown(及其孩子):控制下拉列表的样式 2.data-am-dropdown(及其孩子):控 ...
- amazeui学习笔记--js插件(UI增强3)--折叠面板Collapse
amazeui学习笔记--js插件(UI增强3)--折叠面板Collapse 一.总结 注意点: 1.data-am-collapse:这个东西就是展开折叠事件 2.am-collapse(包括其下属 ...
- amazeui学习笔记--js插件(UI增强2)--按钮交互Button
amazeui学习笔记--js插件(UI增强2)--按钮交互Button 一.总结 1.按钮loading状态: <button type="button" class=&q ...
随机推荐
- Mac OS终端利器 iTem2 配置大全
转载链接:https://www.cnblogs.com/diyxiaoshitou/p/9017413.html 之前一直使用 Mac OS 自带的终端,用起来虽然有些不太方便,但总体来说还是可以接 ...
- CVE-2017-11882利用
CVE-2017-11882是微软公布的远程执行漏洞,通杀所有office版本及Windows操作系统 工具使用 本文使用的EXP来源于unamer/CVE-2017-11882,然后结合MSF进行渗 ...
- sqlilab less23-less27a
less23 本关过滤掉了注释符号-- 和#,并且变量带入数据库时被单引号包裹.需要将后边的单引号闭合.使用and '1'='1,将其加在注入语句的末尾,使用suffix参数 less-24 以后填坑 ...
- 思维导图MindManager的过滤主题功能如何使用
MindManager是一款多功能思维导图工具软件.但有的思维导图繁杂,用户只需要查看自己感兴趣的主题该怎么办呢?接下来,我就为大家详细介绍MindManager思维导图2020版的过滤主题功能,可以 ...
- FL studio系列教程(十七):FL Studio走带面板介绍
FL Studio走带面板主要是用来控制播放.录音以及调整歌曲速度的,除此之外还可以用来选择样本剪辑.下面就来详细地看一下这部分菜单. 1.样本/歌曲模式 样本/歌曲模式主要是用来切换样本和歌曲两种模 ...
- Linux安装禅道教程
环境: centos7 64位 禅道11.2 Linux一键安装包64位 下载: 禅道下载地址: http://dl.cnezsoft.com/zentao/11.2/ZenTaoPMS.11.2.s ...
- 【电子取证:FTK Imager篇】DD、E01系统镜像仿真
星河滚烫,人生有理想! ---[suy999] DD.E01系统镜像动态仿真 (一)使用到的软件 1.FTK Imager (v4.5.0.3) 2.VMware Workstation 15 P ...
- C语言讲义——数组和指针
数组名表示的是这个数组的首地址.即如果有int a[10],则a 相当于&a[0]. #include <stdio.h> main() { int a[5]= {1,3,5,7, ...
- Java基础教程——BigDecimal类
BigDecimal类 float.double类型的数字在计算的时候,容易发生精度丢失. 使用java.math.BigDecimal类可以解决此类问题. 前面讲过Math类,现在的BigDecim ...
- 惠州发布5G任务计划表,将出台智慧灯杆建设计划与技术规范
广东省惠州市于近日发布<惠州市贯彻落实广东省加快5G产业发展行动计划(2019-2022年)工作任务计划表>(以下简称:<5G任务计划表>). <5G任务计划表>明 ...