资讯专栏INFORMATION COLUMN

《JavaScript高级程序设计》笔记:基本概念

ygyooo / 754人阅读

摘要:一写在前面最近重读高级程序设计,总结下来,查漏补缺。但这种影响是单向的修改命名参数不会改变中对应的值。这是因为对象的长度是由传入的参数个数决定的,不是由定义函数时的命名参数的个数决定的。实际改变会同步,改变也会同步

一、写在前面

最近重读《JavaScript高级程序设计》,总结下来,查漏补缺。

二、JS简介 2.1 JS组成

ECMAscript:以ECMA-262为基础的语言,由浏览器支持

DOM:编程接口(API), 将页面映射成节点结构(文档树),提供操作方法

BOM:浏览器对象模型,处理浏览器窗口和框架交互(部分扩展)

2.2

蓝色线代表网络读取,红色线代表执行时间,均针对脚本;绿色线代表 HTML 解析。

默认,同步,顺序解析,解析到立即加载,加载完立即执行。

defer,异步,同时加载,html解析完成后执行(多个,不一定按顺序执行,适用外链脚本)(HTML5要求按出现顺序执行,但实际不一定,不一定会在DOMContentLoaded事件触发前执行)

async,异步,同时加载,加载完立即执行(多个,乱序执行)

2. XHTML和HTML主要不同?

元素必正确嵌套,防止

单标签< />、双标签<> 闭合

标签名、属性大小写敏感

必须有根元素

三、基本概念 3.1 ECMAScript语法

区分大小写

标识符:

参数,变量,属性,函数名

以字母、下划线_、$开头

惯例为驼峰

名称不能为关键字

注释:

单行注释 / /

块级注释 /* */

严格模式: 编译指示" user strict "

语句:

推荐以分号;结尾

if( ) 可省略代码块{ }直接书写语句,但推荐不省略

关键字:

break case catch continue debugger default delete

do else finally for function if in

instanceof new return switch this throw try

typeof var void while with

保留字:

abstract boolean byte char class const debugger double

enum export extends final float goto implements import

int interface long native package private protected public

short static super synchronized throws transient volatile

外加let、yield、eval、arguments

3.2数据类型

变量:松散类型(可修改值的类型),var创建时有作用域

只定义未初始化,值为undefined

不推荐在局部中定义全局变量

数据类型:

简单(基本)数据类型:number,string,Boolean,undef,null

复杂数据类型:Object

typeof操作符:

值:number,string,boolean,undefined,null,object,function

特殊情况: typeof null ---> object 被认为是空对象指针

对象:

空对象,初始化时obj = null 通过 obj != null 来看是否保存对象引用

新建对象:new Object( ) 或 new Object

布尔:

true false 区分大小写

数值:

八进制(严格模式下失效),0开头,后续值超过7则 079无效,解析为79

十六进制,不区分大小写,0x开头欧,后续0-9、A-F

科学计数法,123e7或123e-7,浮点数最大精度17位小数

浮点数进行计算,结果不准确

数值范围Number.MIN_VALUE 5e-324 ~ Number.MAX_VALUE 1.7976931348623157e+308,超出对应±infinity

NaN,返回不为数值,也为数值类型,不影响代码执行,操作NaN都返回NaN,与任何值都不相等

字符串:

0或多个16位unicode字符组成

单双引号无区别

字符字面量:  f " " x u 及6位unicode字符

一旦创建,值不可改变,只能---->新的创建,销毁原来的(旧版浏览器执行速度慢)

3.3 方法

数值

isNaN( )隐式转换数值

Number( ),null ----> 0,undefined ---> NaN,八进制前导0失效,十六进制转换为十进制整数

parseInt( ),直到不是数字,保留整数,识别八进制、十六进制,可指定第二个参数parseInt(a,8)指定八进制

parseFloat( ),不解析前导0,可用于:科学计数法转完全展示

字符串:

toString(a) 参数可设置进制,数据转换值,有些不能转换(undefined,null)

String()遵循先按toString执行,不成功再按String()转换(undefined----> undefined , null ----> null )

对象:

constructor 创建实例的函数(构造函数)

hansOwnProperty 检查当前对象中存在某属性(不查原型)

isPrototypeOf 检查是否是某对象的原型

propertyIsEnumerable 能否使用for-in枚举

toLocaleString 返回对象字符串表示

toString( ) 对象的字符串表示

valueOf( ) 返回对象的字符串、数值或布尔值

3.3 操作符

算数、位、关系、相等操作符

一元操作符(隐式转换):

只能操作一个值

前置(副效应:语句被求值前值改变)

后置(语句被求值后值改变)

含对象,执行valueOf( ) 后得到的值进行加减

位操作符:

转换为32位整数,31位二进制数+ 1位符号位(0正1负)

按位非 ~ 得到值的负值 - 1(底层操作,比 - a - 1 快)

按位与 & 二进制每位相与得出二进制值

按位或 | 二进制每位相或得出二进制值

按位异或^ 两位相异则为1,否则为0

左移 << 移动后补0,不影响符号位

右移 >> 保留符号位,移动后补0

无符号右移 >>> 不保留符号位,负数一般右移后很大

布尔操作符:

非 !

与 && 短路操作(有 false 则不往下执行),null 返回null,NaN返回NaN ,undefined返回undefined

或 || 短路操作(有true 则不往下执行 )

乘性操作符:

隐式转换为数值后计算,/ 除法 ,% 取余

加性操作符:

+ 加法, - 减法

关系操作符:

< 、 >、 <=、 >=

都为字符串时,比较字符串字符编码值

有对象,转valueOf( ),不成则toString( )

字符串比较,大写小于小写,如需比较可全转小写

都为字符串的数字,则按编码比

一个数字一个字符串,会转为数值

转换出NaN,则结果false

相等操作符:

强制转换规则:有布尔转为数值、有数有字符串转为数值

只有一个对象,按照valueOf()转换后比较

null == undefined,null !== undefined

两个对象,比较是否指向同一对象

条件操作符:条件?‘真,取值’:‘假,取值’
赋值操作符:

=、 +=、 *=、 /=、 %=、 <<=、 >>=、 >>>=(简化书写,不影响性能)

逗号操作符:

分隔多个操作

a =(1,2,3,4),a值为最后一个4

3.4 PS:

1. valueOf与toString

推荐阅读 《javascript高级程序设计》笔记:valueOf() / toString() 对比

2. 负数的二进制表示:

绝对值的二进制码,按位取反,加1,得到

3. 按位非运算符 ~

function fast() {
    let s = 2222222222; 
    let start1 = Date.now();
    for (var i = 1; i<10000000000;i++) { s = ~ s }; 
    console.log("fast",Date.now() - start1); 
 }; 
 function slow() {
    let s = 2222222222; 
    let start2 = Date.now();
    for (var i = 1; i<10000000000;i++) { s = - (s + 1) }; 
    console.log("slow",Date.now() - start2); 
 };
 fast();
 slow();

相差4-5秒左右,底层运算更快

4. && || 操作
let d = { name: "aa" } ,??代表某参数

d && ?? 返回??

?? && d ??为true返回d,否则返回??

有null NaN undefined 返回 对应null NaN undefined

d || ?? 返回 d

?? || d ??为false返回d

d || e 返回 d

都是null NaN undefined 返回 对应null NaN undefined

3.5 语句

if (条件) { 代码块 }

do-while 后测试循环语句,while中满足则执行

while 前测试循环语句

for :while做不到,for也做不到、for( ; ; )三参数可选

for-in 循环对象属性,顺序不可预测

label 名字:语句,结合for循环,方便continue 名字 执行该操作,break 名字 中断名字操作

break continue

with 将代码作用域设置到特定对象中,影响性能,不建议使用

with(location) { 
    var t = search.name;
    var w = hostname;
}
// 等同于
var t = location.seatch.name;
var w = location.hostname;

switch 全等比较(不进行类型转换),可以合并情况,case可为变量、表达式,

switch (i) {
    case 25: 
        /* 合并两种情形 */
    case 35: 
        alert("25 or 35");
        break;
    ...
}
3.6 函数

function (参数) {函数体}

定义的参数个数可以≠传入参数个数,适用传参个数不定执行不同操作

可function acc(a)传acc( ) 或function acc()传acc(1,2)

内部可用arguments来访问参数,如果a对应arguments[0],两值内存空间独立,但互相同步

没有重载:函数没有签名,同名函数后定义的生效

读取这两个值会访问相同的内存空间;它们的内存空间是独立的,但它们的值会同步。但这种影响是单向的:修改命名参数不会改变arguments中对应的值。另外还要记住,如果只传入了一个参数,那么为arguments[1]设置的值不会反应到命名参数中。这是因为arguments对象的长度是由传入的参数个数决定的,不是由定义函数时的命名参数的个数决定的。

书中:修改命名参数不会改变arguments中对应的值。 实际改变arguments[0]会同步a ,改变a也会同步argumenets[0]

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/104440.html

相关文章

  • 004-读书笔记-JavaScript高级程序设计 基本概念(下)

    摘要:操作符,会将数值改变正数变成负数负数变成正数。同时,也说明了,使用两个逻辑非操作符和的操作结果相同。操作符得到的是余数。不相等操作符有两种。 这篇笔记的内容对应的是《JavaScript高级程序设计(第三版)》中的第三章。 1.操作符 1-1 一元操作符 递增和递减操作符 递增和递减操作符有两个 ++ 和 --。一元操作符使用的时候,可以前置也可以后置。由于两个操作方式类似,先只说明 ...

    nevermind 评论0 收藏0
  • javascript高级程序设计笔记:内存与执行环境

    摘要:因此,所有在方法中定义的变量都是放在栈内存中的当我们在程序中创建一个对象时,这个对象将被保存到运行时数据区中,以便反复利用因为对象的创建成本通常较大,这个运行时数据区就是堆内存。 上一篇:《javascript高级程序设计》笔记:继承近几篇博客都会围绕着图中的知识点展开 showImg(https://segmentfault.com/img/bVY0C4?w=1330&h=618);...

    fuyi501 评论0 收藏0
  • JavaScript高级程序设计笔记基本概念(三)

    摘要:数据类型中有种简单数据类型也称为基本数据类型和。因为特殊值被认为是一个空的对象引用。尽管和有这样的关系,但它们的用途完全不同。这样做不仅可以体现作为空对象指针的惯例,而且也有助于进一步区分和。 数据类型 ECMAScript中有5种简单数据类型(也称为基本数据类型):undefined,null,boolean,number和string。 typeof typeof null会返回o...

    jas0n 评论0 收藏0
  • JavaScript高级程序设计学习笔记三(基本语法)

    摘要:数据类型中有种简单数据类型也称为基本数据类型和。在中非空字符串,非零数字,任意对象,都被认为。而空字符串,和,,认为是。用于表示整数和浮点数。标识符由数字字母下划线美元符组成,但首字母不能是数字。变量方法对象命名推荐驼峰法。 JavaScript语法 一.语法简介 因为JavaScript语法和Java等语法非常类似。所以只是简单介绍一下。 大小写 JavaScript是大小写敏感的语...

    Mike617 评论0 收藏0
  • JavaScript高级程序设计》读书笔记

    摘要:为了每个对象都能通过来检测,需要以或者的形式来调用,传递要检查的对象作为第一个参数,称为。对象都是动态的,这就意味着每次访问对象,都会运行一次查询。是语言中立的用于访问和操作和文档。 一、第三章 基本概念: 1.理解参数 1.1 可以向函数中传递任意数量的参数,并且可以通过arguments对象来访问这些参数。 1.2 arguments对象只是类似数组,它通过length来确定传进来...

    dayday_up 评论0 收藏0

发表评论

0条评论

ygyooo

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<