学习笔记——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 ...
随机推荐
- 最大子段和问题(C/C++)
Description 给定有n个整数(可能为负整数)组成的序列a1,a2,...,an,求该序列连续的子段和的最大值. 如果该子段的所有元素和是负整数时定义其最大子段和为0. Input 第一行有一 ...
- 【转】AWVS扫描小技巧
1.文件头加 Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html) 可以绕过狗,waf ...
- vue在移动端使用alloyfinger手势库操作图片拖拽、缩放
最近开发一个活动需要在手机上给上传的头像加上边框.装饰,需要拖拽.手势缩放边框下的头像图片,因为是vue项目,开始尝试了vue-drag-resize这个组件,对图片拖拽支持很完美,但是无法手势缩放, ...
- 基于chaosblade的故障注入平台小试
当今社会互联网应用越来越广泛,用户量日益剧增.在人们对互联网服务的依赖性增大的同时,也对服务的可用性和体验感有了更高的要求.那么如何保障服务在运营过程中能一直给用户提供稳定的.不间断的.可靠可信的服务 ...
- jQuery 第六章 实例方法 动画
.show() .hide() .toggle() .fadeIn() .fadeout() .fadeToggle() .fadeTo() .slideDown() .slideUp() .slid ...
- python的os命令
os常用命令 os.sep:取代操作系统特定的路径分隔符 os.name:指示你正在使用的工作平台.比如对于Windows,它是'nt',而对于Linux/Unix用户,它是'posix'. os.g ...
- Yali 19 - 8 - 6 test T2 猪国(pig) 题解
T2 猪国 题⽬描述 猪国是⼀个由 \(n\) 个城市组成的国家. 国王意识到了"要致富,先修路"这句话的重要性,它决定⼤规模修路.不巧的是,猪国的 猪们不太会⼯程,于是只能请隔壁 ...
- CentOS7.X 下安装MySQL8.0(附文件)
这是64位的安装包.如果需要32位的可以去官网下载哦.步骤一样 1 获取安装资源包 mysql-8.0.18-1.el7.x86_64.rpm-bundle.tar 链接: https://pan.b ...
- 方格取数(number) 题解(dp)
题目链接 题目大意 给你n*m个方格,每个格子有对应的值 你从(1,1)出发到(n,m)每次只能往下往上往右,走过的点则不能走 求一条路线使得走过的路径的权值和最大 题目思路 如果只是简单的往下和往右 ...
- Hibernate框架session的方法
package Test; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernat ...