学习笔记——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 ...
随机推荐
- 重闯Sqli-labs关卡第二天(5关)
第五关(双注入GET单引号字符型注入-报错时间注入) 盲注盲注,Blind SQL Injection基于布尔SQL盲注基于时间的SQL盲注基于报错的SQL盲注 核心代码:(不会返回数据库中的数据) ...
- C++中内存布局 以及自由存储区和堆的理解
文章搬运自https://www.cnblogs.com/QG-whz/p/5060894.html,如有侵权请告知删除 当我问你C++的内存布局时,你大概会回答: "在C++中,内存区分为 ...
- Boom 3D的广播有哪些,有啥特色
Boom 3D(Windows系统)不仅为用户提供了包括3D立体音效.古典音乐音效在内的多种音效增强功能,而且还为用户提供了广播功能.该广播功能不仅涵盖了国内广播节目,而且还涵盖了国际广播节目. 接下 ...
- 「LOJ 537」「LibreOJ NOIP Round #1」DNA 序列
description NOIP 复赛之前,HSD 桑进行了一项研究,发现人某条染色体上的一段 DNA 序列中连续的\(k\)个碱基组成的碱基序列与做题的 AC 率有关!于是他想研究一下这种关系. 现 ...
- Java继承的两道实验题目
设计一个表示二维平面上点的类Point,包含有表示坐标位置的Protect类型的成员变量 获取和设置x和y值的public方法 package classwork_6; public class Po ...
- [BUGCASE]FixedDataTable表格数据渲染错误
一.问题描述 广告配置中绑定第三方规格ID表格数据,有一部分展示错乱,具体如下: 表格组件使用 Facebook 的 (fixed-data-table) 组件 二.原因分析 1.检查props 先查 ...
- UUID介绍与生成的方法
什么是UUID? UUID是Universally Unique Identifier的缩写,它是在一定的范围内(从特定的名字空间到全球)唯一的机器生成的标识符.UUID具有以下涵义: 经由一定的算法 ...
- 死磕以太坊源码分析之Fetcher同步
死磕以太坊源码分析之Fetcher同步 Fetcher 功能概述 区块数据同步分为被动同步和主动同步: 被动同步是指本地节点收到其他节点的一些广播的消息,然后请求区块信息. 主动同步是指节点主动向其他 ...
- 第7.6节 Python中类的继承机制详述
在本章第一节,介绍了面向对象程序设计的三个特征:封装.继承和多态,前面章节重点介绍了封装和多态,由于Python语言是多态语言,对象的类型不再由继承等方式决定,而由实际运行时所表现出的具体行为来决定, ...
- 第8.14节 Python类中内置方法__str__详解
一. object类内置方法__str__和函数str 类的内置方法__str__和内置函数str实际上实现的是同一功能,实际上str调用的就是__str__方法,只是调用方式不同,二者的调用语法如下 ...