摘要:大小写的不同分别表示不同的变量。本质由一组无序的名值对组成的。字符串中第一个小数点有效,第二个无效,后面的字符串会被忽略。注意双引号开头,必须以双引号结尾,单引号也是如此转义字符表示非打印字符或具有其他用途的字符。
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("不要这样测试"); }
注意,永远不呀测试某个特定的浮点数值。
注意:由于内存的限制,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
即非数值,是一个特殊的数值。 表示一个本来要返回数值的操作数,未返回数值的情况。(不会抛出错误) **注意:任何数除于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方法,再测试返回值
非数值转换为数值函数: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") 312500008.String类型:
表示由0个或多个16位Unicode字符组成的字符序列,字符串。 字符串由双引号或单引号表示。 **注意:双引号开头,必须以双引号结尾,单引号也是如此**
换行 制表 空格 回车 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属性可能不会精确地返回字符串中的字符数目。
**注意:JS中的字符串是不可变的,也就是,字符串一旦创建,它们的值就不能改变,** 要改变某个变量保存的字符串,必须先销毁原来的字符串,其次用另一个包含新值的字符串填充改变量
var lang = "Java"; lang = lang + "Script"; lang刚开始由java字符串组成。 第二行lang的值重新定义为"java与Script"组合: 1.创建能容纳10个字符的新字符串 2.然后在这个字符串中填充javascropt 3.最后销毁原来Java和字符串“Script" 这个过程在后台发生的,旧版本的浏览器中拼接字符串时速度很慢的原因所在
一个值转换为另一个字符串有两种方式:
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
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/100723.html
摘要:与执行环境相关的变量对象中有执行环境定义的所有变量和函数作用域链代码在一个环境中执行,便会创建变量对象的一个作用域链。 执行环境 执行环境是什么? javascript的解释器每次开始执行一个函数时,都会为每个函数创建一个执行环境(execution context)。 执行环境定义了变量或者函数有权访问的其他数据,决定了他们各自的行为。 与执行环境相关的变量对象(...
摘要:客户端检测方式能力检测怪癖检测用户代理检测能力检测最常用也是最为人们广泛接受的客户端检测形式是能力检测又称特性检测。在可能的情况下,尽量使用进行能力检测。 客户端检测方式 能力检测 怪癖检测 用户代理检测 能力检测 最常用也是最为人们广泛接受的客户端检测形式是能力检测(又称特性检测)。能力检测的目标不是识别特定的浏览器,而是识别浏览器的能力。采用这种方式不必顾及特定的浏览器如何...
摘要:语法语法可以表示三种类型的值简单值使用与相同的语法,可以在中表示字符串数值布尔值和。对象对象作为一种复杂数据类型,表示的是一组无序的键值对儿。如果字符串长度超过了个,结果中将只出现前个字符。 JSON 语法 JSON语法可以表示三种类型的值 简单值:使用与 JavaScript 相同的语法,可以在 JSON 中表示字符串、数值、布尔值和 null 。但 JSON 不支持 JavaS...
摘要:简介简史诞生于年,当时主要负责表单的输入验证。实现一个完整的由三部分组成核心文档对象模型浏览器对象模型就是对实现该标准规定的各个方面内容的语言的描述。把整个页面映射为一个多层节点结构。由万维网联盟规划。主要目标是映射文档的结构。 JavaScript简介 JavaScript简史 JavaScript诞生于1995年,当时主要负责表单的输入验证。 如果没有表单验证的功能,填入信息之...
showImg(http://img3.douban.com/lpic/s8958650.jpg); 0x00 javascript组成 ECMAScript(-265)核心语言部分 DOM文档对象模型(DOM1、2、3) BOM浏览器对象模型(提供与浏览器交互的接口和方法) 0x01 async 异步加载 执行顺序不定 charset defer 延迟加载,立即下载脚本但不执行 src ...
阅读 1759·2021-11-18 13:20
阅读 1142·2021-10-11 10:59
阅读 2988·2021-08-24 10:01
阅读 3501·2019-08-29 14:21
阅读 3352·2019-08-29 14:15
阅读 3515·2019-08-26 12:23
阅读 3343·2019-08-26 11:46
阅读 3345·2019-08-26 11:35