《javascript高级程序设计》摘录

chapter1

 javascript是一种专门为网页交互而设计的脚本语言,分为三个部分:ECMAScript(提供核心语言功能)、文档对象模型(DOM)(提供与网页内容操作的方法和接口)、浏览器对象模型(BOM)(提供与浏览器交互的方法和接口)

chapter2

defer: 可以让脚本在文档完全呈现之后再执行,延迟脚本总是按照指定的顺序执行

async: 改变处理脚本的行为,只适用于外部脚本。不让页面等待脚本的下载,从而异步加载页面其他内容。

chapter3

ECMAScript语法

区分大小写

命名不能使用关键字

关键字:break do instanceof typeof case else new var catch finally return void continue for switch while debugger* function this with default if throw delete in try

保留字:abstract enum int short boolean export interface static byte extends long super char final native synchronized class float package throws const goto private transient debugger implements protected volatile double import public

标识符:第一个字符必须是字母、下划线或美元符号;其他字符可以是字母、数字、下划线或美元符号

严格模式:'use strict'  一些不确定的行为将得到处理,并且对某些不安全的操作也会跑出错误

变量是松散类型,可以保存任何类型的数据

5种简单类型:undefined null boolean number string  1种复杂类型:object

typeof 判断数据类型:undefined boolean number string object  function:   typeof是操作符而不是函数  (typeof message)

typeof null为object。从逻辑上看,null表示一个空对象指针,所以返回object。如变量被定义为保存对象,那么最好把该变量初始化为null。这样,只需要直接检查null值就可以知道相应的变量是否保存了一个对象的引用了.

typeof未声明的变量,返回undefined。而直接alert为声明的则会报错

实际上undefined派生自null值,因此 null==undefined 为true

boolean只有两个字面值:true 和 false; 空字符串  null  undefined 0和NaN为false。任何对象都为true

浮点数的精度是17位,浮点计算会产生误差, 如0.1+0.2=0.30000000000000004。因此不要测定某个固定的浮点数

Infinity无穷,不能参与计算的数值。可以用isFinite() 函数来检测

NaN:用于表示一个本来要返回数值的操作未返回数值,这样就不会抛出错误。例如任何数值除以0,返回NaN。

任何涉及NaN的操作,都会返回NaN,如NaN/10为NaN;NaN与任何值都不相等,包括自身

isNaN (); 确认这个参数是否“不是数值”。可用于对象,先调用valueof()方法,确认返回值是否可以转换为数值,如果不能,基于这个返回值再调用toString()方法,再测试返回值。

数值转换有3个方法:Number()  parseInt()  parseFloat()

Number(): null--0,  undefined--NaN , 空字符串--0,11WWQ--NaN, 不够合理。

parseInt(): 判断第一个非空字符,如不是数字或负号,返回NaN, 空字符串--NaN,12ewe--12, 可以识别16进制或8进制。可以用第二个参数指定基数:parseInt("10",16)--16

parseFloat():只解析10进制的数,因为没有第二个参数指定基数。

toString():转换为字符串。数值、布尔值、对象和字符串都有这个方法,但是null和undefined没有这个方法。toString(2,8,10,16)可以接收基数

在不知道要转换的值是否是Null和undefined时,可以使用转型函数String()。如有toString()方法,则调动该方法。如为Null则返回Null, undefined则返回undefined

String(true)---true

针对对象,toString():返回对象的字符串表示; valueOf():返回对象的字符串、数值或布尔值

前置递增和递减是在包含他们语句被求值之前就执行了, 而后置递增和递减是在包含他们语句被求值之后执行

对于for in: 枚举对象,当值为Null或undefined值时,不执行循环体。 因此在使用之前,建议先确认该值不是null或undefined值

with语句的作用是将代码的作用域设置到一个特定的对象中,主要为了简写多次编写同一个对象的工作。严格模式下不允许使用with语句,大量使用会导致性能下降。

with(location){

    var qq=search.subString(1);

   var hostname=hastname;

}

switch(true): 每个case都按照顺序被求职,直到找到匹配的值或遇到default为止

switch语句使用的是全等操作符, 不会进行类型转换

chapter4

基本类型值在内存中占据固定大小的空间,因此被保存在栈内存中。复制时, 会创建该值的副本。

引用类型的值是对象,保存在堆内存中。

当从一个变量向另一个变量复制引用类型的值时, 这个值得副本其实是一个指针,引用同一个对象。

使用typeof来判断基本数据类型。利用instanceof来判断引用类型(对于基本类型,都返回false)

但代码在一个环境中执行时,会创建变量对象的一个作用域链(scope chain), 保证对执行环境有权访问的所有变量和函数的有序访问。

js没有块级作用域

使用var声明的变量会自动被添加到最接近的环境中。当没有var声明时,会自动添加到全局环境。

在严格模式下, 初始化未经声明的变量会导致错误。

js具有自动垃圾收集机制。找出那些不再继续使用的变量,释放其占有的内存。垃圾收集器会按照固定时间间隔,周期性的执行这一操作。

最常用的垃圾收集方式是标记清除。

chapter5

创建对象实例方式:

(1)new操作符跟Object构造函数

var person= new Object();

person.name='lily';

(2)对象字面量表示法:对象定义的简写方式。简化创建包含大量属性的对象的过程。属性名也可以使用字符串。

var person={

     name:'lily',

    age: 29

}

访问对象属性,(1)点表示法:person.name; (2)方括号表示法:person['name'], 方括号内可以为变量

Array数组:每一项都可以保存任何类型的数据,大小可以动态调整。

定义数组:

(1) 使用Array, var colors=new Array();  可以省略new操作符。 

(2)数组字面量表示法:var colors=["red","blue"];

判断是否是数组:Array.isArray(value)方法

所有对象都具有toLocaleString()、toString()、valueOf()方法。

调用数组的toString()、valueOf()方法会返回相同的值,即数组中每个值的字符串形式拼接而成的一个以逗号分隔的字符串。alert()默认调用toString()方法

toLocaleString()调用每一项的toLocaleString()方法。 而其他的是调用每一项的toString()方法。

使用join()方法,使用不同的分隔符来创建这个字符串。

如数组中某项为null 或undefined,则上述方法返回的字符串中以空字符串表示。

数组方法:push()    pop()

LIFO: 后进先出  push()    pop()

FIFO:先进先出 shift()  移出数组中第一项,并返回该值。 unshift():能在第一项前添加任意个项并返回新数组长度。

reverse()和sort():排序。 调用toString()方法进行比较。如为数值,也比较的是字符串。5要比10字符串大。所以需要一个比较函数

function compare(value1, value2){

   if(value1<value2){

       return -1;

}else if(value1>value2){

      return 1;

} else{

    return 0;

}

}

values.sort(compare);

对于数值类型的,

function compare(value1,value2){

     return value2-value1;

}

String()类型:charAt(): 以单字符字符串的形式返回给定位置的那个字符。

concat(): 拼接字符串。 

slice(): 两个参数:起始位置和结束位置

substr(): 两个参数:起始位置和返回的个数

substring():两个参数:起始位置和结束位置

splice(): 向数组中部插入项。返回一个数组,包含从原始数组中删除的项。

(1)删除:指定2个参数,要删除的第一项的位置和删除的项数:

(2)插入:指定3个参数或更多:起始位置, 0(要删除的项数)、要插入的项。

(3)替换:指定3个参数或更多

位置方法:indexOf()和lastIndexOf(): 从开头和结尾进行查找。返回该项在数组中的位置。如无,则返回-1。 比较使用全等操作符。接收两个参数:要查找的项和查找起始位置的索引(可选)。

遍历操作符:every()  filter()  forEach()  map()  some()

var everyResult=numbers.every(function(item,index,array){ return (item>2)}); 每一项都大于2才返回true

var everyResult=numbers.some(function(item,index,array){ return (item>2)}); 有一项大于2就返回true

var everyResult=numbers.filter(function(item,index,array){ return (item>2)}); 返回数组

var everyResult=numbers.map(function(item,index,array){ return (item*22)}); 

var everyResult=numbers.forEach(function(item,index,array){ }); 执行某操作,没有返回值

缩小方法:reduce()和reduceRight()


Date类型

var now=new Date();

var start=Date.now(); 返回毫秒数


RegExp类型

定义:

1、字面量方式

var expression=/pattern/flags

2、RegExp函数

var expression=RegExp("[bc]at", "i"); 传递的两个参数都是字符串。对于元字符要双重转义

标志:g: 全局模式;  i: 不区分大小写   m:多行模式

exec(); 返回包含第一个匹配项信息的数组,在没有匹配项时返回Null。有index和input两个属性, index表示匹配项在字符串的位置,input表示应用正则表达式的字符串。在存在g的情况下,每调用一次,会继续查找新的匹配项。

test(): 匹配时返回true; 不匹配时返回false。常用于if语句中。

toString()和toLocaleString() 以字面量形式显示正则表达式的字符串; valueOf(); 返回表达式本身。


Function类型: 

函数是对象,函数名是指向函数对象的指针。

没有重载

定义函数:

1、函数声明 function sum() { }  解析器会率先读取函数声明,并使其在执行任何代码之前可以访问。

2、函数表达式 var sum=function(){};  记得添加引号。必须等解析器执行到它所在的代码行,才会真正被解释使用。在这之前调用,会导致错误。

函数名本身就是变量,所以函数也可以作为值来使用。

在函数内部,有两个特殊的对象:arguments和this

arguments包含着传入函数中的所有参数。拥有callee这个属性,是一个指针,指向拥有arguments对象的函数。

this:函数据以执行的环境对象。

caller:保存着调用当前函数的函数的引用。

在函数中,包含着两个属性

length: 函数希望接收的参数个数

prototype:原形。保存所有实例方法的真正所在。

函数包含两个非继承而来的方法:apply()和call(): 在特定的作用域中调用函数,实际上等于设置函数体内的this值。

call():传递的参数必须逐一列举出来。如:function callSum(num1,num2){return sum.call(this,num1,num2)};    

而apply()可以传入arguments  function callSum(num1,num2){return sum.apply(this,quguments)};

apply()和call():另一个重要的应用是扩充函数赖以运行的作用域。使对象不需要与方法有耦合关系。

bind(): 创建一个函数的实例,其this值会被绑定到传给bind()函数的值。

 

基本包装类型:Boolean Number  String

创建的基本包装类型的对象,只存在于一行代码的执行瞬间,立即被销毁。

Number()类型:toString()方法可传递一个表示基数的参数。toFixed():按照指定的小数位返回数组的字符串表示。 num.toFixed(2)

String类型:trim()方法。 trimLeft() trimRight()分别用于删除开头和结尾的空格。

大小写转换:toLowerCase()  toLocaleLowerCase()  toUpperCase()  toLocaleUpperCase()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值