博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
你不知道的JavaScript(中)读书笔记(一)
阅读量:6208 次
发布时间:2019-06-21

本文共 2709 字,大约阅读时间需要 9 分钟。

第一章

1、内置类型

JavaScript有七种内置类型【除了对象以外,其他统称为“基本类型”】:

  • 空值(null)
  • 未定义(undefined)
  • 布尔值(boolean)
  • 数字(number)
  • 字符窜(string)
  • 对象(object)
  • 符号(symbol,ES6新增的)

如何检查值得类型:typeof运算符,但是不能检测到null,typeof检测null会显示“object”,需要用符合条件来检测null值得类型

1 var a = null;2 (!a && typeof a === "object"); // true

2、JavaScript中的变量是没有类型的,只有值才有

3、 undefined 和 undeclared

undefined:在作用域中声明但是还没有赋值的变量

undeclared:还没有在作用域中声明过的变量

第二章 值(数组,字符串,数字)

1、数组 (length、indexOf()、concat())

  数组可以容纳任何类型的值,例如:字符串、数字、对象甚至其他数组(例如多维数组)

2、字符串(length、indexOf()、concat())【字符串翻转问题】

3、数字(包括“整数”和带小数的十进制数)

(1)小数点   由于数字值可以使用 Number 对象进行封装(参见第 3 章),因此数字值可以调用 Number.prototype 中的方法(参见第 3 章)。例如, tofixed(..) 方法可指定小数部分的显示位数:

1 var a = 42.59; 2 a.toFixed( 0 ); // "43" 3 a.toFixed( 1 ); // "42.6" 4 a.toFixed( 2 ); // "42.59" 5 a.toFixed( 3 ); // "42.590" 6 //toPrecision(..) 方法用来指定有效数位的显示位数: 7 a.toPrecision( 1 ); // "4e+1" 8 a.toPrecision( 2 ); // "43" 9 a.toPrecision( 3 ); // "42.6"10 a.toPrecision( 4 ); // "42.59"11 a.toPrecision( 5 ); // "42.590"

(2)浮点数    浮点数无法做到十分精确,所以如果要判断 0.1 + 0.2 和 0.3 是否相等,可以使用 Number.EPSILON (相当于设置一个误差范围,无限接近于0)

function numbersCloseEnoughToEqual(n1,n2) {return Math.abs( n1 - n2 ) < Number.EPSILON;}var a = 0.1 + 0.2;var b = 0.3;numbersCloseEnoughToEqual( a, b ); // truenumbersCloseEnoughToEqual( 0.0000001, 0.0000002 ); // false

 (3) 检测整数   检测一个值是否是整数,可以使用 ES6 中的 Number.isInteger(..) 方法:

Number.isInteger( 42 ); // trueNumber.isInteger( 42.000 ); // trueNumber.isInteger( 42.3 ); // false

 (4)检测一个值是否为安全的整数,可以使用 ES6 中的 Number.isSafeInteger(..) 方法:

Number.isSafeInteger( Number.MAX_SAFE_INTEGER ); // trueNumber.isSafeInteger( Math.pow( 2, 53 ) ); // falseNumber.isSafeInteger( Math.pow( 2, 53 ) - 1 ); // true

4、null指空值(或者指曾赋过值)   null是一个特殊关键字,不是标志符,不能将其当做变量来使用和赋值

5、undefined 指没有值(从未赋值)  undefined是一个标志符,可以当做变量来使用赋值

6、NaN 可以理解为“无效数值” “ 失败数值”或者“坏数值”,用于支出数字类型中的错误情况,即“执行数学运算没有成功,这是失败后返回的结果”,NaN和自身不相等,但是可以用 Number.isNaN(..)来判断

 

if (!Number.isNaN) {

Number.isNaN = function(n) {
return n !== n;
};
}

 

7、Object.is(..) 来判断两个值是否绝对相等,但是能使用==或者===就是用这两个,效率更高

 

8、值和引用

简单值(null、undefined、字符串、数字、布尔值和ES6中的symbol),总是通过值的复制方式来赋值/传递

复合值(数组和封装对象、函数)总是通过引用复制方式来赋值/传递

例如:

var a = 2;var b = a; // b是a的值的一个副本b++;a; // 2b; // 3var c = [1,2,3];var d = c; // d是[1,2,3]的一个引用d.push( 4 );c; // [1,2,3,4]d; // [1,2,3,4]

 考点

1 function foo(x) { 2 x.push( 4 ); 3 x; // [1,2,3,4] 4 // 然后 5 x = [4,5,6]; 6 x.push( 7 ); 7 x; // [4,5,6,7] 8 } 9 var a = [1,2,3];10 foo( a );11 a; // 是[1,2,3,4],不是[4,5,6,7]
vfunction foo(x) {x.push( 4 );x; // [1,2,3,4]// 然后x.length = 0; // 清空数组x.push( 4, 5, 6, 7 );x; // [4,5,6,7]}var a = [1,2,3];foo( a );a; // 是[4,5,6,7],不是[1,2,3,4]

x.length = 0 和 x.push(4,5,6,7) 并没有创建一个新的数组,而是更改了当前的数组。于是 a 指向的值变成了 [4,5,6,7] 。

 

转载于:https://www.cnblogs.com/chorkiu/p/10139707.html

你可能感兴趣的文章
PowerShell传递Exchange中的自定义属性(员工编号等)
查看>>
采用“Website Baker”优化LNMP架构
查看>>
RHEL5安装配置rz和sz命令
查看>>
Windows Server 2012正式版RDS系列⒁
查看>>
cloudstack 4管理器安装备忘
查看>>
ESXi默认本地用户介绍
查看>>
在window上安装php+mysql+apache
查看>>
GRE over IPSEC 同时NAT-T(PAT)
查看>>
WinXP不能共享Win7的打印机的解决方法
查看>>
高可用高性能负载均衡软件HAproxy详解指南-第二章(配置文件、关键字、ACL)...
查看>>
去朱家尖游玩
查看>>
合并压缩JavaScript,开发发布两不误
查看>>
【Absible学习】ansible管理windows系统
查看>>
WCF简单教程(5) 用IIS做Host
查看>>
Cisco设备作为DHCP服务器的配置方法(下)
查看>>
Android帧缓冲区(Frame Buffer)硬件抽象层(HAL)模块Gralloc的实现原理分析(6)...
查看>>
被问到“你现在的薪水是多少时”,该如何回答?
查看>>
敏捷个人:下一个项目经理就是你(Agile tour 2011 青岛)
查看>>
敏友的【敏捷个人】有感(1): 敏捷个人-阅读笔记 by 人月神话
查看>>
Exchange Server 2013配置邮件流与外部访问
查看>>