JavaScript高等程序设计(第3版)读书笔记
1.辨别大小写:
变量、函数名和操纵符都要辨别大小写。大小写的差别离别示意差别的变量。
2.标识符:
变量、函数、属性、函数参数的名字。
注重:
- 开首必需字母、下划线、一个美圆标记$
- 其他字符可所以字母、下划线、美圆标记、数字。
- 也可以包含扩大的ASCII或Unicode字母。(不引荐)
起名:采纳驼峰大小写花样:第一个字母小写,剩下的每一个有意义的单词的首字母大写
例子:firstSecond、myCar
3.解释:
- 单行谛视//
- 块级解释/ /
4.严厉形式:
为JS定义一种差别的剖析与实行模子。(对某些不安全的操纵抛出毛病)
**开启:在JS文件顶部增加'use strict';**
也可以在函数内部的上方包含这条指导。
**支撑版本:IE10+、Firefox 4+、Safari 5.1+、Opera12+ 、谷歌**
5.语句:
每段代码都要以;末端。
注重:
- 假如省略了分号,由剖析器肯定语句的末端。
- 虽然可以省略,然则加上了这个分号可以防止许多毛病,也可以增长代码的机能,剖析器就不必推想那里插进去分号。
6.关键字和保留字:
关键字:言语保留的,不能用做标识符。
保留字:不能用做标识符的。
**注重:在严厉/非严厉形式下保留字会有少差别**
7.变量:
**js的变量是松懈范例的,就是可以用来保留任何范例的数据。**
- Var message = ‘hi’;
- var message = 18;
注重:
- 变量刚最先存储’hi’;然后被数字值100庖代。(这类是可以的,然则不引荐)
- 用var润饰的变量,将成为定义该变量的作用域中的部分变量。
function test(){
var message = "hi";//部分
}
test();
alert(message);//毛病
假如省略了var,从而建立了全句变量(严厉形式下报错)
以上面的例子为例:
挪用了test(),这个变量就有定义,就可以在函数外的任何地方被挪用。
可以运用一条语句定义多个变量用逗号离开(可初始化,也可以不初始化):
var a,b,c;
Var a = 1,b=’11’,c=false;
8.数据范例(JS具有动态性):
1.**基本数据范例**:
- Undefined
- Null
- Boolean
- Number
- String
2.庞杂数据范例:
object。
实质:由一组无序的名值对构成的。
注重:js不支撑任何建立自定义范例的机制,而一切值终究都将是上述6种数据范例之一
3.typeof操纵符:
检测给定变量的数据范例:typeof
运用typeo操纵符可以返回以下状况:
- ‘undefined’:这个值未定义。
- ‘boolean’ :布尔值
- string : 字符串
- number : 数值
- object : 对象或null
- function : 函数
//typeof 可以数值或变量
var a = "some string";
alert(typeof a);
//typeof括号可以省略
alert(typeof (a));
alert(typeof 11);
注重:
- tupeof null 会返回 object. 特别值:null被认为是一个空的对象援用;
- Safari5 、谷歌7之前的版本,对正则表达式挪用typeof操纵符会返回”function”,而其他浏览器返回object.
注重:function也是个对象,不是一种数据范例,但是,函数也确切有一些特别的属性,经由历程typeof操纵辨别函数和其他对象是必要的。
4.Undefined 范例:
Undefined 范例只需一个值,就是特别的undefined.
**在运用var声明,但未对其初始化时,这个变量的值就是underined**
var message;
alert (message == undefined); ture
//声清楚明了,但未对其举行初始化。
//显现
var message=undefined;
alret (message == undefined); ture
//不过,包含undefined的值的变量与还没有定义的变量照样不一样的。
var messgae;
//var age;
alert(message); //undefined
//运用alerg函数时还没有声明的变量age--会致使毛病。
alert(age); //报错
假如都把age变量解释掉了:
//var age,
var message;
alret(type messgae); undefined;
alret(type age); undefined;
注重:即使未初始化变量会自动赋值undefinde,然则显现变量赋值是个明智的挑选
5.Null范例:
Null范例是第二个只需一个值的数据范例,特别的值是null.
null 代表着空对象指针.
typeof检测null,就会放回object
var car = null;
alert(typeof car); // object
注重:假如变量存储对象,请初始化null,而不是其他值。
只需直接检测null值就可以晓得响应的变量是不是已保留了一个对象的援用:
if(car != null){
}
实际上,undefined值,来自null值的。
它们举行推断就是ture.
注重:它们有着如许关联,然则用处不一样
- 只需意在保留对象的变量还没有真正保留对象,就保留null
6.Boolean 范例:
两个值:true和false
注重:
- ture不一定即是1
- false不一定即是0
- 辨别大小写
js一切范例的值都有与这两个不二值等价的值
要将值转换对应的布尔值,Boolean()函数
var a = "11";
var message = Boolean(a); ture
转换划定规矩:
ture:
- 任何非空字符串
- 非0数字值
- 任何对象
- n/a(不实用)
则反之
在掌握语句中,自动实行响应的转换划定规矩
var message = "11";
if(message){
alert("ok");
}
7.Number范例:
整数和浮点数值
整数:
- 十进制:10
- 八进制: 第一名必需0,然后八进制数字序列1(0-7),假如字面值中数值超出局限,前导0被疏忽,背面看成十进制
- 八进制在严厉形式无效
- 十六进制,开首0x,背面随着十六进制数字(0-9以及A-F),字母可以大写也可以小写
- 算术盘算时,八进制和十六进制示意的数值都被转换十进制数值
注重:正零和负0被认为相称
浮点数:
- 包含小数点,小数点背面至少有一名数字。(小数点前面可以没有整数)
- 保留的浮点数值的内存空间时整数的两倍(所以小数点没有任何数字。自动转换整数来保留。假如是一个整数1.0,那末更会自动转换了)
- 关于极大或极小的值,可以用e来示意,示意浮点数值
e示意:e前面的数值。乘以 10的指数次幂(即使是一个大写或小写的字母e)
var floatNum = 3.125e7 3.125 乘于十的七次方
5.e示意法,示意极小的数值
0.00000000000000003
3e-17
会把小数点六个0以上的浮点转换为e示意
6.浮点最高精度是17位小数。盘算其精度不如整数
0.1+0.2 组织不是0.3,而是0.300000000004
if(a+b == 0.3){
alret("不要如许测试");
}
注重,永久不呀测试某个特定的浮点数值。
7.1数值局限:
注重:因为内存的限定,ECMAScript并不能保留世界上一切的数值。
js中可以示意的最小数值和最大的数值保留在Number.
MIN_VALUE:这个值是5e-324;
MAX_VALUE:这个值是1.7976931348623157e+308
**注重:盘算的时刻凌驾js数值局限的值,那末数值自动转换infinity值**
- 数值是负数,-infinity(负无限)
- 数值是正数,infinity(正无限)
注重:只需盘算返回了正或负的infinnity值,将没法举行下一次的盘算
确认最大值与最小值之间,可以运用isFinite()函数,假如在局限内,返回true
接见:
Number.NEGATIVB_INFINITY
Number.POSITUVE_INFINITY
获得 负 和 正 infinity
7.2 NaN:
即非数值,是一个特别的数值。
示意一个原本要返回数值的操纵数,未返回数值的状况。(不会抛出毛病)
**注重:任何数除于0会返回NaN,不会影响其他代码的实行**
- 任何触及NaN的操纵(NaN/10)都邑返回NaN,(多步盘算有可以致使题目)
- NaN与任何值都不相称,包含NaN自身。
alert(NaN == NaN) //false
为针对上面状况:
isNaN()函数。
参数可所以任何范例,函数会帮我们,肯定这个参数是不是 “**不是数值**”。
它会尝试把参数这个值,转换为**数值**。不是数值的值会直接转换为数值。
不能被转换的数值的值都邑致使这个函数返回true.
alert(isNaN(NaN)) ture
alert(isNaN(10)) false
alert(isNaN('10')) false
alert(isNaN('blue')) ture
alert(isNaN(ture)) false
- NaN自身,即非数值。
- 数值10和字符串10,能转换数值,返回了false
- blue不能转换数值
- true可以转换成数值1
Tips: isNaN也合适对象,在对象挪用函数时,起首会挪用对象的valueOF要领,然后肯定该要领返回的值是不是可以转换为数值。假如不能,基于这个返回值挪用tostring要领,再测试返回值
7.3.数值转换:
非数值转换为数值函数:Number()、parseInt()、parseFloat
- Number:用于任何数据范例
- 其他两个,把字符串转换成数值
注重:这三个函数关于一样的输入会有返回差别的效果
Number转换划定规矩:
- 布尔值,true和false,转换1和0
- 数字值,简朴的传入和返回
- null,返回0
- undefined,返回NaN
字符串:
- 只包含数字(包含正负号状况),则将其转换十进制。(注重前导0会被疏忽)
- 字符串是浮点,转换对应的浮点数值。(疏忽前导零);
- 字符串是十六进制花样,转换雷同大小的十进制整数
- 字符串是空,转换为0
- 除了以上的花样外的字符串,转换为NaN
6.假如对象,挪用对象的valueOf(),然后根据上述的划定规矩转换返回的值。假如效果是NaN,挪用对象的toString()要领。然后再根据上述划定规矩转换返回字符串值。
注重:该函数处置惩罚字符串毕竟庞杂,不够合理,因而处置惩罚整数的时刻更经常使用,parseInt()函数
parseint函数:
- 转换字符串时,看其是不是相符数值形式。
- 疏忽字符串前面的空格,直到找到第一个非空格字符串
- 假如第一个字符不是数字符串或着负号,返回NaN
- 用它转换空字符会返回NaN.
- 假如第一字符串是数字字符串,继承剖析下一个,直到剖析完一切或碰到非数字符串。比方:123blue,blue会被完整疏忽,转换123.
- 假如是浮点数,22.5,会转换22,小数点并非数字字符串。
- 假如字符串中的第一个字符是数字字符,辨认种种整数花样(二、十、十六进制)。假如以”0x”开首会转换十六个进制。以0开首而且背面随着数字,八进制来剖析。
var a = parseInt("123blue") 123
var b = parseInt("") NaN
var c = parseInt("0xA"); 10
var d = parseInt("22.5") 22
var e = parseInt("070") 56
var f = praseInt("70") 70
vae g = praseInt("0xf") 15
注重:js3和js5,转换八进制的时刻,有所差别,在js5中,前导0被认为无效,这个值当做0,严厉形式也是云云
解决办法:
可认为parseint函数,供应第二参数,转换运用的基数(若干进制)
parseInt("0xAF",16); 175
parseInt("AF",16);175
parseInt("AF") NaN
注重:基数决议怎样剖析输入的字符串,防止了毛病的剖析,所以运用的时刻,明白基数
parseFloat:
- 第一个字符串最先剖析每一个,直到末端或碰到无效的浮点数字字符为止。
- 字符串中第一个小数点有用,第二个无效,背面的字符串会被疏忽。22.34.5 转换22。34
- 它会疏忽前导0
- 十六进制花样字符串,一直转换0.。(只剖析十进制,没有第二参数指定参数的用法)
- 假如字符串包含的是一个可剖析为整数的数(没有小数点或着小数点后都是0),它会返回整数。
var a = parseFloat("123blue") 123
var b = parseFloat("OxA") 0
var c = parseFloat("22.5") 22.5
var d = parseFloat("22.34.5") 22.34
var e = parseFloat("0808.5")808.5
var f = parseFloat("3.125e7") 31250000
8.String范例:
示意由0个或多个16位Unicode字符构成的字符序列,字符串。
字符串由双引号或单引号示意。
**注重:双引号开首,必需以双引号末端,单引号也是云云**
8.1 转义字符:示意非打印字符或具有其他用处的字符。
\n 换行
\t 制表
\b 空格
\r 回车
\f 进纸
\\ 解释
\* 在字符串中运用,示意单个‘字符串
\" 在字符串中运用,示意单个"
\xnn 以16进制代码nn示意的字符nn必需0-F
\unnnn 以16进制代码nnnn示意一个Unicode字符,n必需为0-F
var test = "this is the letter sigma: \u03a3."
长度28
6个转义字符示意1个字符。
假如字符串中包含双字节字符,那末length属性可以不会精确地返回字符串中的字符数量。
8.2 字符串特性:
**注重:JS中的字符串是不可变的,也就是,字符串一旦建立,它们的值就不能转变,**
要转变某个变量保留的字符串,必需先烧毁本来的字符串,其次用另一个包含新值的字符串添补转变量
var lang = "Java";
lang = lang + "Script";
lang刚最先由java字符串构成。
第二行lang的值从新定义为"java与Script"组合:
1.建立能包容10个字符的新字符串
2.然后在这个字符串中添补javascropt
3.末了烧毁本来Java和字符串“Script"
这个历程在背景发作的,旧版本的浏览器中拼接字符串时速率很慢的缘由地点
8.3 转换字符串:
一个值转换为另一个字符串有两种体式格局:
- toString()要领:数值、布尔值、对象、字符串都有这个要领,这个要领返回字符串中的一个副本,然则null和undefined值没有这个要领。
平常不需要在这要领括号传参数,然则数值挪用的时刻,可以传,进制数(基数)。
var age =11; var ageAsString = age.toString() 字符串11 var a =10; alert(a.toString(2)); 1010 注重:没有参数,默许基数10.
- 在不晓得要转换的值是不是是null或undefined,运用String(),能转换任何范例的值
String函数转换划定规矩:
- 假如值有tostring要领,则挪用该要领(没有参数)并返回响应的效果
- 假如值是null,则返回null
- 假如值是undefined,则返回undefined
var a = 10;
var b = true
var c = null;
var d;
string(a) 10
string(b) true
string(c) null
String(d); undefined
前两个个:跟挪用toString函数,获得效果雷同一样。
后两个,没有tostring要领,所以string函数就返回了这两个值的字面量。
9. Object 范例:
对象实在就是一组数据和功用的鸠合。
对象可以经由历程实行new操纵符跟要建立对象范例的称号来建立
自定义对象:建立Object范例的实例并为其增加属性和要领
var o = new Object();
跟Java建立对象差不多。
假如不给组织函数通报参数,可以省略背面那一对括号。
var 0 = new Object//有用不引荐
明白一个主要头脑:
Object 范例所具有的任何属性和要领一样存在于更详细的对象中。(Object根类)
Object的每一个实例具有以下属性和要领:
- Constructor:保留着用于建立当前对象的函数。 组织函数:就是Object().
- hasOwnProperty(propertyName):用于搜检给定的属性是不是在当前对象实例中(而不是在实例的原型中)。
参数属性名:必需字符串情势指定 :o.hasOwnProperty(‘name’)
- isPrototypeof(Object):搜检传入的对象是不是是另一个对象的原型
- propertyIsEnumerable(propertyName):用于搜检给定的属性是不是可以运用for-in语句。必需与字符串情势指定。
- toLocaleString():返回对象以字符串示意,该字符串与实行环境的区域对应
- toString():返回对象以字符串示意
- valueof():返回对象以字符串、数值、布尔值示意。与toString要领返回值雷同。
注重:object是一切对象的基本,因而一切对象都具有这些基本的属性和要领
对象的行动不一定实用于JavaScript中的其他对象:
- 浏览器环境中的宿主对象:BOM、DOM