JavaScript高级程序设计(第3版)读书笔记

1.区分大小写:

变量、函数名和操作符都要区分大小写。大小写的不同分别表示不同的变量。

2.标识符:

变量、函数、属性、函数参数的名字。

注意:

  1. 开头必须字母、下划线、一个美元符号$
  2. 其他字符可以是字母、下划线、美元符号、数字。
  3. 也可以包含扩展的ASCII或Unicode字母。(不推荐)

起名:采用驼峰大小写格式:第一个字母小写,剩下的每个有意义的单词的首字母大写

例子:firstSecond、myCar

3.注释:

  1. 单行注视//
  2. 块级注释/ /

4.严格模式:

为JS定义一种不同的解析与执行模型。(对某些不安全的操作抛出错误)**开启:在JS文件顶部添加'use strict';**    也可以在函数内部的上方包含这条指示。**支持版本:IE10+、Firefox 4+、Safari 5.1+、Opera12+ 、谷歌**

5.语句:

每段代码都要以;结尾。

注意:

  1. 如果省略了分号,由解析器确定语句的结尾。
  2. 虽然可以省略,但是加上了这个分号可以避免很多错误,也可以增进代码的性能,解析器就不用推测哪里插入分号。

6.关键字和保留字:

关键字:语言保留的,不能用做标识符。保留字:不能用做标识符的。**注意:在严格/非严格模式下保留字会有少不同**

7.变量:

**js的变量是松散类型的,就是可以用来保存任何类型的数据。**
  1. Var message = 'hi';
  2. var message = 18;

注意:

  1. 变量刚开始存储'hi';然后被数字值100取代。(这种是可以的,但是不推荐)
  2. 用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.**基本数据类型**:
  1. Undefined
  2. Null
  3. Boolean
  4. Number
  5. String

    2.复杂数据类型:

    object。

本质:由一组无序的名值对组成的。

注意:js不支持任何创建自定义类型的机制,而所有值最终都将是上述6种数据类型之一

3.typeof操作符:

检测给定变量的数据类型:typeof

使用typeo操作符可能返回以下情况:

  1. ‘undefined':这个值未定义。
  2. ‘boolean' :布尔值
  3. string : 字符串
  4. number : 数值
  5. object : 对象或null
  6. function : 函数
//typeof 可以数值或变量
var a = "some string";
alert(typeof a);
//typeof括号可以省略
alert(typeof (a));
alert(typeof 11);

注意:

  1. tupeof null 会返回 object. 特殊值:null被认为是一个空的对象引用;
  2. 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.

注意:它们有着这样关系,但是用途不一样

  1. 只要意在保存对象的变量还没有真正保存对象,就保存null

6.Boolean 类型:

两个值:true和false

注意:

  1. ture不一定等于1
  2. false不一定等于0
  3. 区分大小写
js所有类型的值都有与这两个不贰值等价的值要将值转换对应的布尔值,Boolean()函数var a = "11";
var message = Boolean(a); ture

转换规则:

ture:

  1. 任何非空字符串
  2. 非0数字值
  3. 任何对象
  4. n/a(不适用)

则反之

在控制语句中,自动执行相应的转换规则
var message = "11";
if(message){alert("ok");
}

7.Number类型:

整数和浮点数值

整数:

  1. 十进制:10
  2. 八进制: 第一位必须0,然后八进制数字序列1(0-7),如果字面值中数值超出范围,前导0被忽略,后面当作十进制
  3. 八进制在严格模式无效
  4. 十六进制,开头0x,后面跟着十六进制数字(0-9以及A-F),字母可以大写也可以小写
  5. 算术计算时,八进制和十六进制表示的数值都被转换十进制数值

注意:正零和负0被认为相等

浮点数:

  1. 包含小数点,小数点后面至少有一位数字。(小数点前面可以没有整数)
  2. 保存的浮点数值的内存空间时整数的两倍(所以小数点没有任何数字。自动转换整数来保存。如果是一个整数1.0,那么更会自动转换了)
  3. 对于极大或极小的值,可以用e来表示,表示浮点数值
  4. 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值**
  1. 数值是负数,-infinity(负无穷)
  2. 数值是正数,infinity(正无穷)

注意:只要计算返回了正或负的infinnity值,将无法进行下一次的计算

确认最大值与最小值之间,可以使用isFinite()函数,如果在范围内,返回true

访问:
Number.NEGATIVB_INFINITY
Number.POSITUVE_INFINITY
得到 负 和 正 infinity
7.2 NaN:
即非数值,是一个特殊的数值。表示一个本来要返回数值的操作数,未返回数值的情况。(不会抛出错误)**注意:任何数除于0会返回NaN,不会影响其他代码的执行**
  1. 任何涉及NaN的操作(NaN/10)都会返回NaN,(多步计算有可能导致问题)
  2. 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
  1. NaN本身,即非数值。
  2. 数值10和字符串10,能转换数值,返回了false
  3. blue不能转换数值
  4. true可以转换成数值1

Tips: isNaN也适合对象,在对象调用函数时,首先会调用对象的valueOF方法,然后确定该方法返回的值是否可以转换为数值。如果不能,基于这个返回值调用tostring方法,再测试返回值

7.3.数值转换:
非数值转换为数值函数:Number()、parseInt()、parseFloat
  1. Number:用于任何数据类型
  2. 其他两个,把字符串转换成数值

注意:这三个函数对于同样的输入会有返回不同的结果

Number转换规则:

  1. 布尔值,true和false,转换1和0
  2. 数字值,简单的传入和返回
  3. null,返回0
  4. undefined,返回NaN
  5. 字符串:

    1. 只包含数字(包含正负号情况),则将其转换十进制。(注意前导0会被忽略)
    2. 字符串是浮点,转换对应的浮点数值。(忽略前导零);
    3. 字符串是十六进制格式,转换相同大小的十进制整数
    4. 字符串是空,转换为0
    5. 除了以上的格式外的字符串,转换为NaN

6.如果对象,调用对象的valueOf(),然后按照上述的规则转换返回的值。如果结果是NaN,调用对象的toString()方法。然后再按照上述规则转换返回字符串值。

注意:该函数处理字符串毕竟复杂,不够合理,因此处理整数的时候更常用,parseInt()函数

parseint函数:

  1. 转换字符串时,看其是否符合数值模式。
  2. 忽略字符串前面的空格,直到找到第一个非空格字符串
  3. 如果第一个字符不是数字符串或着负号,返回NaN
  4. 用它转换空字符会返回NaN.
  5. 如果第一字符串是数字字符串,继续解析下一个,直到解析完所有或遇到非数字符串。例如:123blue,blue会被完全忽略,转换123.
  6. 如果是浮点数,22.5,会转换22,小数点并不是数字字符串。
  7. 如果字符串中的第一个字符是数字字符,识别各种整数格式(二、十、十六进制)。如果以"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:

  1. 第一个字符串开始解析每一个,直到末尾或遇到无效的浮点数字字符为止。
  2. 字符串中第一个小数点有效,第二个无效,后面的字符串会被忽略。22.34.5 转换22。34
  3. 它会忽略前导0
  4. 十六进制格式字符串,始终转换0.。(只解析十进制,没有第二参数指定参数的用法)
  5. 如果字符串包含的是一个可解析为整数的数(没有小数点或着小数点后都是0),它会返回整数。
var a = parseFloat("123blue") 123var b = parseFloat("OxA") 0var 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-Fvar 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 转换字符串:
一个值转换为另一个字符串有两种方式:
  1. toString()方法:数值、布尔值、对象、字符串都有这个方法,这个方法返回字符串中的一个副本,但是null和undefined值没有这个方法。
  2. 一般不需要在这方法括号传参数,但是数值调用的时候,可以传,进制数(基数)。

    var age =11;
    var ageAsString = age.toString() 字符串11var a =10;
    alert(a.toString(2)); 1010
    注意:没有参数,默认基数10.
  3. 在不知道要转换的值是不是null或undefined,使用String(),能转换任何类型的值

String函数转换规则:

  1. 如果值有tostring方法,则调用该方法(没有参数)并返回相应的结果
  2. 如果值是null,则返回null
  3. 如果值是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的每个实例具有以下属性和方法:

  1. Constructor:保存着用于创建当前对象的函数。 构造函数:就是Object().
  2. hasOwnProperty(propertyName):用于检查给定的属性是否在当前对象实例中(而不是在实例的原型中)。

    参数属性名:必须字符串形势指定 :o.hasOwnProperty('name')

  3. isPrototypeof(Object):检查传入的对象是否是另一个对象的原型
  4. propertyIsEnumerable(propertyName):用于检查给定的属性是否能够使用for-in语句。必须与字符串形势指定。
  5. toLocaleString():返回对象以字符串表示,该字符串与执行环境的地区对应
  6. toString():返回对象以字符串表示
  7. valueof():返回对象以字符串、数值、布尔值表示。与toString方法返回值相同。

注意:object是所有对象的基础,因此所有对象都具有这些基本的属性和方法

对象的行为不一定适用于JavaScript中的其他对象:

  1. 浏览器环境中的宿主对象:BOM、DOM

JavaScript高程三----(基础一)相关推荐

  1. 跟我学《JavaScript高程3》第一讲,视频课程,课程笔记

    跟我学<JavaScript高程3> 第一讲:第1~3章 课程制作:bling,兴哥,5年Java,3年前端 课程知识:JavaScript.Html.Css 课程目标:前端体系课程,逐步 ...

  2. JavaScript葵花宝典(基础)

    HTML 和 JavaScript 计划: 基础语法 关键名词 标签 CSS样式表*** JavaScript脚本(动态交互) JQuery库(JS库)为服务器端的网页动态交互提供基础 为服务端脚本的 ...

  3. JavaScript进阶(三)

    JavaScript进阶(三) 2019版黑马程序员javaScript进阶面向对象ES6 122集教程,哔哩哔哩链接:https://www.bilibili.com/video/BV1Kt411w ...

  4. v8引擎处理html,JavaScript V8引擎基础教程

    本篇教程介绍了JavaScript V8引擎基础教程,希望阅读本篇文章以后大家有所收获,帮助大家对JavaScript的理解更加深入. < 一.浏览器内核-渲染引擎 渲染,就是根据描述或者定义构 ...

  5. 函数闭包--JavaScript权威指南--基础篇4

    函数JavaScript权威指南–基础篇4 一.知识点–函数–闭包 1.要理解函数闭包,要先知道几个概念: ①块级作用域和函数作用域的概念 FAQ:什么是块级作用域? 在类C语言中是这么定义的:变量的 ...

  6. Java前端学习(一)JavaScript脚本语言基础

    JavaScript脚本语言基础 前言 一.JavaScript简介 1.应用 2.特点 3.示例 4.补充 二.语法基础 1.数据类型 2.表达式和运算符 3.流程控制语句 4.函数 三.对话框 1 ...

  7. JAVA_web基础 JavaScript简介、基础、语法

    1. JavaScript简介 1.1. JavaScript由来 Netscape 发明了 JavaScript JavaScript由Netscape 在1995年发明.早期的主要目的是处理一些用 ...

  8. Javascript核心技术的基础语法

    Javascript核心技术的基础语法 一.什么是javascript Javascript是基于对象和事件驱动的脚本语言,主要是嵌入到HTML中,应用在客户端,动态操作网页元素,也可以作用于服务端. ...

  9. JavaScript脚本语⾔基础语法笔记总结

    JavaScript脚本语⾔&基础语法&笔记总结 0.学前准备: JavaScript简介使⽤⽅法 1. JavaScript简介 什么是JavaScript? 前端Web技术的组成: ...

  10. 学习javascript数据结构(三)——集合

    前言 总括: 本文讲解了数据结构中的[集合]概念,并使用javascript实现了集合. 原文博客地址:学习javascript数据结构(三)--集合 知乎专栏&&简书专题:前端进击者 ...

最新文章

  1. k means聚类算法_一文读懂K-means聚类算法
  2. 比可微架构搜索DARTS快10倍,第四范式提出优化NAS算法
  3. Bootstrap-table学习笔记(一)
  4. es6+的javascript拓展内容
  5. Delphi 2010 refactor / refactoring 重构不能使用的原因以及解决
  6. 超声相控阵合成孔径成像FPGA设计介绍
  7. python 文本聚类算法
  8. js变量作用域和变量提升
  9. JVM GC性能方面的考虑(吞吐量和STW)
  10. java代码从编译到加载执行的过程
  11. ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your
  12. fianl属性 java_java基础-类的高级属性(包、final、内部类)
  13. 数据结构与算法--递归(Recursion Algorithm)
  14. 解决uni-app开发中iphoneX下背景不能全屏铺满的问题
  15. Matlab之矩阵的特征值与特征向量求解
  16. Debian中proftpd+mysql+虚拟用户+匿名用户+磁盘限额的配置
  17. 【路径规划】基于matlab Beizer和改进的粒子群算法风环境下翼伞航迹规划【含Matlab源码 199期】
  18. 找到Linux共享文件夹的实际位置
  19. 为什么说vue没有完全遵循mvvm
  20. 详述数据中心内部通风的几种形态

热门文章

  1. android正确释放webview,解决Android WebView内存释放
  2. 阿里云个人网站备案流程
  3. 读后感:麦田守望者--走出软件作坊:三五个人十来条枪 如何成为开发正规军(四十三)
  4. 如何使用Python从视频中提取图像?(帧提取)详细代码实现
  5. 计算机DNS服务器错误,找不到服务器或DNS错误怎么办?Win7找不到服务器或dns错误解决方法...
  6. matlab中stem_这个假期为STEM中的儿童和儿童使用机器人入门
  7. formula 返回list_Formula element (List)
  8. 服务器关机 正在注销,Win7系统关机一直卡在正在注销如何解决
  9. 服务器系统咋关机呀,服务器关机详细步骤
  10. js获取不同时区时间