JavaScript小红书读书笔记

    xiaoxiao2021-03-26  51

    第一章 JavaScript简介

    从一个简单的输入验证器发家Netscape公司开发,Brendan Eich, LiveScript微软的JScriptTC39 指定标准,ECMA-262, ECMAScript(读 ek-ma-script)

    Javascript

    三部分:核心(ECMAScript),文档对象类型DOM,浏览器对象类型BOM

    ECMAScript不一定非要在浏览器上使用,它只是一种对程序语言的标准规定。ActionScript、JavaScript都实现了ECMAScript。

    版本问题

    Netscape的JavaScript1.1,删除针对浏览器的代码,支持Unicode编辑加工,为了与ISO/IEC-16262保持严格一致真正修改,字符串处理、错误定义、数值输出,正则表达式、新控制语句、try-catch异常处理的支持ECMA TC39主导,检验修订,包含了强类型变量、新语句和新数据结构、真正的类和经典继承,定义了与数据交互的新方式同时,TC39下属的一个小组提出ECMAScript 3.1的替代建议,ES3.1获得的支持超过了TC39,4版在正式发布前被放弃(P4),ECMA 3.1成为第5版,增加了JSON对象,继承的方法和高级属性定义,严格模式

    ECMAScript兼容是什么?

    想要成为ECMAScript的实现,该实现必须做到: 1. 支持ECMA-262描述的所有“类型、值、对象、属性、函数以及程序语法和语义 2. 支持Unicode字符标准 3. (可选)添加没有描述的“类型、值、对象、属性、函数” 4. (可选)支持ECMA-262没有定义的“程序和正则表达式语法”

    Web浏览器对ECMAScript的支持(P4)

    DOM:Document Object Model

    针对XML但经过扩展用于HTML的应用程序接口 把整个页面映射为一个多层节点结构,HTML或XML页面由节点组成,节点又包含着不同类型的数据。 DOM创建了表示文档的树形图,开发人员可以进行删除添加修改节点。

    为什么使用DOM?

    无需重新加载页面,就可以修改外观和内容

    因为Netscape和微软在开发DHTML掐架,浏览器互不兼容,负责制定Web通信标准的W3C(World Wide Web Consortium万维网联盟)着手规划DOM

    DOM级别(P6)

    DOM1:DOM Core(如何映射文档结构)和DOM HTML(添加针对HTML的对象和方法)组成

    DOM不是只针对JavaScript

    DOM2: 扩充了鼠标和用户界面事件、范围、遍历,通过对象接口增加了对CSS支持。新模块:DOM视图,DOM事件,DOM样式,DOM遍历和反额为

    DOM3:引入了以统一方式加载和保存文档的方法,新增了验证文档的方法,对核心扩展,开始支持XML1.0

    其他语言DOM标准:SVG,MathML, SMIL

    BOM 浏览器对象类型

    BOM只处理浏览器窗口和框架,扩展包括 * 弹出新浏览器窗口的功能 * 移动缩放和关闭浏览器窗口的功能 * 提供浏览器信息的navigator对象 * 提供加载页面详细信息的location对象 * 提供用户显示器分辨率的screen对象 * 对cookies的支持 * 像XMLHttpRequest和IE的ActiveXObject这样自定义的对象 BOM没有标准遵循,每个浏览器有自己的实现。window和navigator制式事实标准,HTML5在解决

    第三章 基本概念

    语法

    区分大小写标识符:第一个字符必须是一个字母、下划线、或一个美元符号,其他字符可以是ASCII或Unicode字母字符,但不推荐惯例,驼峰大小写格式,第一个小写

    严格模式(P20)

    ECMAS 5中 "use strict",执行结果会有很大不同

    分号

    如果语句省略分号,则有解析器确定语句的结尾。分号可以避免很多错误,如不完整输入,压缩错误,增进代码的性能

    关键字和保留字

    变量

    松散类型:可以用来保存任何类型的数据

    未初始化的变量,保存为undefined

    省略var操作符的,会创建一个全局变量

    数据类型

    6种 1. undefined 2. null:空的对象引用 3. boolean 4. number 5. string 6. object:无序的名值对组成

    typeof返回值
    undefined —— 未定义boolean —— 布尔值string —— 字符串number—— 数值object —— 对象或nullfunction —— 函数

    typeof是一个操作符不是函数

    undefined值是派生自null值的,因此null == undefined 是true

    Boolean类型(P26)

    转型函数Boolean() true: 非空字符串,非零数字(包括无穷大),任何对象,n/a(not applicable 类型Undefined) false:空字符串,0和NaN,null, undefined

    注意自动转换的发生!

    Number类型(P27)

    八进制:第一位是0,然后是八进制数字序列(0~7),如果字面的数值超出了范围(出现89),会自动当成十进制数值解析 十六进制:前两位必须是0x,后面跟(0~9及A~F),可大写可小写

    进行算术计算时,所有八进制和十六进制表示的数值最终都将被转换成十进制.

    +0和-0相等

    浮点数值

    保存浮点数值需要的内存空间是整数的两倍,抓紧一切机会保存整数。所以如果小数点后没有数字就会保存为整数。

    极大或极小的数值,可以用e表示的浮点数值表示,等于这个数乘以10的指数次幂。

    var floatNum = 3.125e7; // ==31250000 0.0000003 == 3e-7

    最高精度是17位小数,但是,无法测试特定的浮点数值,这是基于IEEE754数值的浮点计算的通病

    0.1 + 0.2 = 0.3000000000000000004

    数值范围

    ECMAScript表示的最小数值保存在Number.MIN_VALUE,大多数浏览器是5e-324, Number.MAX_VaLUE, 1.79….,如果超出范围,会转换成Infinity或-Infinity,

    可以用isFinite()函数测试是否在范围内

    NaN(Not a Number)

    本来要返回数值的操作数未返回数值的情况(这样就不会抛出错误了)

    NaN与任何值都不相等 NaN == NaN //false

    isNaN(), 不可以转换为数值的返回true , 对象也可以用,先调用对象的valueOf方法, 再调用toString()方法,再返回测试纸 isNaN('blue') //true

    只有0/0 = NaN, 整数/0 = Inifinity, 负数/0= -Inifinity

    数值转换
    Number()parseInt()parseFloat()

    转换规则

    Number * Boolean, true 1, false 0 * null, 0 * undefined, NaN * 字符串

    * 只包含数字:“011.1” -> 11.1 * 包含16进制, 转换成10进制 * 空的,转换为0 * 其他的,NaN

    parseInt(“0xAF”, 16) * 会忽略字符串前面的空格,“1234blue”会转为1234,blue放前面不可以。 * 16进制或8进制,会转为10进制。第二个参数是基数

    * parseInt("AF") //NaN * parseInt("AF", 16) //175

    parseFloat * 第二个小数点无效 * 始终忽略前导的0,只解析十进制

    * 1234blue //1234 * 0xA //0 * 22.5 //22.5 * 22.34.5 //22.34 * 0908.5 //908.5 * 3.125e7 //31250000

    String 包含特殊的字符字面量——转义序列,用于表示非打印字符,或者具有其他用途的字符

    \n 换行 \t 制表 \b 退格 \r 回车 \f 进纸 \\ 斜杠 \' 单引号 \" 双引号 \xnn 十六进制代码nn表示的一个字符,n为0~F,\x41表示A \unnnn 十六进制代码nnnn表示一个Unicode字符,\u03a3希腊字符 * 一个转义序列表示一个字符

    转换为字符串

    toString(): 数值、布尔值、对象和字符串都有这个方法,null和undefined没有。可以传递基数如果不确定是否是null或undefined,可以使用String()。null返回”null”,undefined返回”undefined”

    Object类型

    每个实例都有下列属性和方法 constructor hasOwnProperty(propertyName) isPrototypeOf(Object) propertyIsEnumerable(propertyName) toLocaleString() toString() valueOf()

    一元操作符

    一元操作符:只能操作一个值的操作符 1. ++age(先+后执行), age– num1– + num2 使用的是num1的初始值,此时的num1已经减一 例子:

    var o = { valueOf: function(){ return -1; } } “2”++ 3 "z"++ NaN false++ 1 1.1-- 0.1000000000000000000009 o-- -2

    2. +num, -num + 正,不影响。false和true转换成0和1, 字符串为NaN - 负

    -“01” -1 -“1.1” -1.1 -“z” NaN -false 0 -o 1

    3. 位操作符(P39) ECMAScript所有数值都以IEEE-754 64位格式存储,但是位操作符操作的时候,先将64位转换成32位的整数,然后执行操作,最后把结果转换回64位。 32位中的前31位用于表示整数。第32位用于表示数值的符号:0是整数,1是负数。(符号位),31位中的每一位都是2的幂。 负数,使用的格式是二进制补码。求-18,先求18的二进制码,把1替换0,0替换1,然后加1.

    3.1 按位非 NOT,~ num1 = 25; //二进制00000000000000000000000011001 ~num1 = -26; //二进制11111111111111111111111100110 本质是-num1-1,负数减一,但是NOT速度快 3.2 按位与 AND & 1 & 1 = 1, 1 & 0 || 0 & 1 || 0 & 0 = 0 3.3 按位或 OR | 1 | 1 = 1; 1 | 0 = 1; 0 | 1 = 1; 0 | 0 = 0 3.4 按位异或 XOR ^ 1 ^ 1 = 0, 其余同3.3 3.5 左移 << 2 << 5 ----- 64 10向左移动5位 1000000,后面多5个0,符号位不变 3.6有符号的右移 >> 64 >> 5 ----- 2 3.7 无符号右移 >>> 所有数值的32位都向右移动 正数情况相同 负数,差别非常非常大 -64 >>> 5, 64 ---- 00000...01000000 --- 1111...10111111 + 1 --- 1111...101000000 --- 右移5位,补0 --- 000001111...10

    4.布尔操作符

    1. 逻辑非 ! 对象 false 空字符串 true 0 true 任意非0,Infinity false null true NaN true undefined true !!a, !a无论如何会返回一个布尔值,!再对其求反 2. 逻辑与 && a && b 如果a是对象,返回b 如果b是对象,只有a为true时才会返回b 如果a和b都是对象,返回b 如果有一个是null,返回null 如果有一个是NaN,返回NaN 如果有一个是undefined,返回undefined 短路操作,如果第一个a有结果,不会对b求值。 __如果使用了未定义的值,&&会报错,中断下面代码的执行__ 3. 逻辑或 || 5.
    转载请注明原文地址: https://ju.6miu.com/read-658358.html

    最新回复(0)