《javascript高级程序设计》第三章学习笔记
Undefined类型
- 该类型只有一个值,即undefined。
- 对未初始化的变量和未定义的变量,用typeof检测,都会返回‘undefined’
Null类型
- 该类型只有一个值,null。并且从逻辑角度看,null值表示一个空对象指针,所以typeof null =='object'。
- 只要意在保存对象的变量还没有真正的保存对象,就应该明确的让该变量保存null值。
var a = null;
if (a) {
a.again = 1;
} else {
a.again = 2;
}
//这种情况会报错
var a = {};
if (a) {
a.again = 1;
} else {
a.again = 2;
}
//这种情况不会报错
Boolean类型
false值总结:
1.1 Number类型:0,-0,NaN.
1.2 Undefined : undefined。
1.3 Null : null.
1.4 String : ''.
1.5 Boolean :false.
Number类型
- 浮点数精度问题
var c = 0.1+0.2;
c!=0.3;
- 数值范围
2.1 某次计返回infinity的话,没法参与下次计算,因为infinity不能参与计算,可以用isFinite()来检测。
- NaN != NaN
- isNaN()函数可以用来检测一个变量是否可以转化为数值.
parseInt(''); //NaN
Number('') == 0
parseInt()与parseFloat()的区别:parseFloat()始终会忽略前导的0;parseFloat()只会解析十进制值,没有第二个参数制定基数的说法。
一个值转化为字符串有两种方式:toString()[Null,undefined值没有这个方法],String().
6.1 String():在不知道要转化的值是不是null或者undefined的时候,可以选择。可以将任何类型的值转化为字符串。
String(null) //'null'
String(undefined) //'undefined'
布尔操作
- 一共有三个:非,与,或。
Boolean({}) ///true
- 不能在逻辑与操作中使用未定义的值,会报错。
乘性操作
- 如果参与乘法计算的某个操作不是数值,后台会先使用Number()转型函数将其转换为数值
加性操作
- 如果有一个操作数是字符串,泽相当于拼接字符串。
var b = '123'+78;
//b;
//"12378"
var a='as'+12;
//a;
//"as12"
var c='e'+'f';
//c;
//"ef"
- 如果有一个操作数是对象、数值或者布尔值:会调用他们的toString()方法取得字符串值,然后用字符串的相加规则,undefined和null调用String()方法,取得'undefined'和'null'。
关系操作(>,<,=,<=,>=)
总结:都是字符串的话,直接比较,其他的情况都要先将两个操作上转化为数值,再比较。
注意: 如果字符串操作数不能被转化为合理的数值,比如NaN,任何和NaN进行的关系比较,都是false.
null == undefined //true
4 . null === undefined //false
for-in
ECMAScript对象属性没有顺序,通过for-in循环输出的属性名的顺序是不可预测的。具体来讲,所有的属性都会被返回来,但是返回的先后顺序可能根据浏览器有所不同。
为了保证最大限度的兼容性,需要在使用for-in循环之前,先检测确认该对象的值是不是nulll或者undefeined.(因为有的要报错,有的会直接终止循环,但不报错)。
sarfari3以前的版本会出现一个bug,有的属性会返回两次。(注意兼容性 )
with语句
with语句是将代码的作用域设置到一个特定的对象中。
严格模式下不允许使用,否则会报错。
定义with语句的目的主要是为了简化多次编写的同一个对象的工作。
//改善之前
var qs = location.search.substring(1);
var hostname = location.hostname;
var url = location.href;
//使用with语句
with(location){
var qs = search.substring(1);
var hostname = hostname;
var url = href;
}
在这个重写的例子中,使用with关联了location对象。意味着在with语句的代码块中,每个变量首先被认为是一个局部变量,而如果在局部变量中找不到该变量的定义,就会查询location对象中是否有同名的属性。如果发现同名属性,则以location对象属性的值作为变量的值。
一般不建议使用with。
函数
函数会在执行完return语句之后停止并立即退出,即位于return语句之后的任何代码都不会被执行。
return语句也可以不带任何返回值。并且这种情况下,函数在停止执行后将返回undefined。
函数参数:在内部是用一个数组来表示的,所以不会在乎函数参数传递的数据类型和个数。(所以可以根据传入的参数个数,来模拟实现重载)
arguments对象只是与数组类似,但并不是Array的实例。
《javascript高级程序设计》第三章学习笔记的更多相关文章
- LINUX内核设计与实现第三周读书笔记
LINUX内核设计与实现第三周读书笔记 第一章 LINUX内核简介 1.1 Unix的历史 1969年的夏天,贝尔实验室的程序员们在一台PDR-7型机上实现了Unix这个全新的操作系统. 1973年, ...
- Linux内核设计与实现 第三章
1. 进程和线程 进程和线程是程序运行时状态,是动态变化的,进程和线程的管理操作都是由内核来实现的. Linux中的进程于Windows相比是很轻量级的,而且不严格区分进程和线程,线程不过是一种特殊的 ...
- 《Linux内核分析》之第三章读书笔记
进程管理 进程是处于执行期的程序以及相关的资源的总称,也称作任务.执行线程,简称线程,是在进程中活动的对象. 可以两个或两个以上的进程执行同一个程序 也可以两个或两个以上并存的进程共享许多资源 内核调 ...
- 《Linux内核设计与实现》第四周读书笔记——第五章
<Linux内核设计与实现>第四周读书笔记--第五章 20135301张忻 估算学习时间:共1.5小时 读书:1.0 代码:0 作业:0 博客:0.5 实际学习时间:共2.0小时 读书:1 ...
- linux及安全《Linux内核设计与实现》第一章——20135227黄晓妍
<linux内核设计与实现>第一章 第一章Linux内核简介: 1.3操作系统和内核简介 操作系统:系统包含了操作系统和所有运行在它之上的应用程序.操作系统是指整个在系统中负责完成最基本功 ...
- 《Linux内核设计与实现》Chapter 3 读书笔记
<Linux内核设计与实现>Chapter 3 读书笔记 进程管理是所有操作系统的心脏所在. 一.进程 1.进程就是处于执行期的程序以及它所包含的资源的总称. 2.线程是在进程中活动的对象 ...
- 《Linux内核设计与实现》Chapter 1 读书笔记
<Linux内核设计与实现>Chapter 1 读书笔记 一.Unix的特点 Unix从Multics中产生,是一个强大.健壮和稳定的操作系统. 特点 1.很简洁 2.在Unix系统中,所 ...
- 《Linux内核设计与实现》Chapter 2 读书笔记
<Linux内核设计与实现>Chapter 2 读书笔记 一.获取内核源码 1.使用Git 我们曾经在以前的学习中使用过Git方法 $ git clone git://git.kernel ...
- 《Linux内核设计与实现》Chapter 5 读书笔记
<Linux内核设计与实现>Chapter 5 读书笔记 在现代操作系统中,内核提供了用户进程与内核进行交互的一组接口,这些接口的作用是: 使应用程序受限地访问硬件设备 提供创建新进程与已 ...
- 《Linux内核设计与实现》Chapter 18 读书笔记
<Linux内核设计与实现>Chapter 18 读书笔记 一.准备开始 一个bug 一个藏匿bug的内核版本 知道这个bug最早出现在哪个内核版本中. 相关内核代码的知识和运气 想要成功 ...
随机推荐
- 在新机器部署Qt+mysql程序
1.一般情况下需要将Qt5Core.dll,Qt5Gui.dll,Qt5Sql.dll,Qt5Widgets.dll,platforms\qwindows.dll msvcp120.dll,msvcp ...
- STM32F407Discovery开发板使用环境搭建
差不多4年前买了STM32F407Discovery这块开发板,也用它作为我的毕业设计的一部分,今晚整理一下东西,觉得这么不错的东西应该再次利用起来,做个智能家居系统的一部分什么的也不错,于是,记录一 ...
- 【转】Java Web 项目获取运行时路径 classpath
Java Web 项目获取运行时路径 classpath 假设资源文件放在maven工程的 src/main/resources 资源文件夹下,源码文件放在 src/main/java/下, 那么ja ...
- dp表模型-如何写出for循环动态规划
题目很肤浅.. 但是这件事我们要做.. 那么有一种方法叫做刷表法.. 当你发现这个问题具有最优子结构,重叠子问题时 那么这是一个dp问题是使用本方法的前提 画出该dp状态所对应的矩阵 画出转移关系线. ...
- Hibernate的一级缓存
Hibernate的一级缓存 什么是缓存:缓存将数据库/硬盘上文件中数据,放入到缓存中(就是内存中一块空间).当再次使用的使用,可以直接从内存中获取 缓存的好处:提升程序运行的效率.缓存技术是Hibe ...
- 前台json 的一些 处理 (转)
JS解析json数据并将json字符串转化为数组的实现方法 转自(http://www.jb51.net/article/32795.htm) <!DOCTYPE HTML PUBLIC &qu ...
- MT4平台经验总结
https://www.mql5.com/zh/code/8462 https://www.mql5.com/zh/code/8074 https://www.mql5.com/zh/code/787 ...
- JS冒泡排序(数组)
冒泡排序是把数组相邻的两个值进行比较,然后根据条件执行相应的命令 var arr = [0,4,8,5,2,7,1,3,6,9]; for(var s = 0;s<arr.length;s++) ...
- [转]netty对http协议解析原理
本文主要介绍netty对http协议解析原理,着重讲解keep-alive,gzip,truncked等机制,详细描述了netty如何实现对http解析的高性能. 1 http协议 1.1 描述 标示 ...
- css中的四个不同的position设置
<!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8" ...