javascript面向对象编程指南

最近在看这本书,以下是我的笔记,仅供参考。

第二章 基本数据类型、数组、循环及条件表达式

2.1 变量

区分大小写

2.3 基本数据类型

  1. 数字:包括浮点数与整数

  2. 字符串:一序列由任意数量字符组成的序列

  3. 布尔值:true或false

  4. undefined:试图访问一个不存在的变量,会得到一个特殊值undefined;使用一个未初始化的变量也会如此,javascript会自动将变量在初始化前值设定为undefined

  5. null:另一种只包含一个值的特殊数据类型。所谓的null值,通常是指没有值、空值,不代表任何东西。

    注意:null与undefined最大的不同在于,被赋予null的变量通常被认为是已经定义了的,只不过它不代表任何东西。

    任何不属于上述五种基本类型的值都会被认为是一个对象。

2.3.1 typeof 查看类型操作符

typeof:查看类型操作符,返回一个代表数据类型的字符串,它的值包括:“number”、“string”、“boolean”、“undefined”、“object”、“function”。

2.3.2 数字
  • 八进制:数字以0开头

  • 十六进制:用0x前缀表示一个十六进制值(简称为hex)

  • 指数表示法:1e+1 表示数字1后面加一个0,也就是10

    也可以这样理解:2e+3为数字2的小数点向右移三位

    2e+3 -> 2.0.0.0.->2000

    同理2e-3为数字2的小数点向左移三位

    2e-3 -> 0.0.0.2.->0.002

  • Infinity:代表超出了javascript处理范围的数值,但Infinity依然是一个数字。

    1e+309->Infinity

    1e+308->1e+308

    另外,任何数除0也为Infinity。Infinity表示的是最大数(或比最大数还要大的数),Infinity前加一个负号,表示最小数(比最小数还要小的数)

    Infinity-Infinity->NaN

    -Infinity+Infinity->NaN

    而且,Infinity与其他任何操作数执行任何算术运算结果都是Infinity。

  • NaN(not a number)

    typeof NaN->"number"

    如果在对一个假定的数字执行某个操作时失败,会得到一个NaN。

    var a=10*"f";->NaN

    而且NaN是具有传染性的,只要算术运算中存在一个NaN,整个运算就会失败。

    1+2+NaN -> NaN

2.3.2 字符串

一对单引号或者双引号之间的任何值会被视为一个字符串。两个字符串之间使用加号是一个字符串拼接操作,返回是两个字符串拼接之后的结果(最好确保所有操作数都是字符串)。

  • 字符串转换

      >>>var s='1';s=3*s;typeof s;
    "number"
    >>>s
    3
    >>>var s='1';s++;typeof s;
    "number"
    >>>s
    2
    //数字字符串转换为数字(更好是调用parseInt函数)
    >>>var s='100';s++;typeof s;
    "string"
    >>>s=s*1;
    101
    >>>typeof s;
    "number"
    //转换失败
    >>>var d='101 dalmatians';
    >>>d*1
    NaN
    //其他类型转换为字符串
    >>>var n=1;
    >>>typeof n;
    "number"
    >>>n=""+n;
    "1"
    >>>typeof n;
    "string"
2.3.4 布尔值

两种值:true和false

  • 逻辑运算符:! && ||

  • 除下列特定值(falsy)以外(它们将被转换为false),其余大部分值(truthy)在转换为布尔值时都为true。

      空字符串“”
    null
    undefined
    数字0
    数字NaN
    布尔值false
  • 惰性求值:连续的逻辑操作中,操作结果在最后一个操作完成之前就已经明确了的话,该操作往往不必再继续执行了,因为不会对最终结果产生任何影响。

  • 在一个逻辑表达式中遇到一个非布尔型的操作数,那么该操作数的值会成为该表达式所返回的结果。

      >>>true||"something"
    true
    >>>true&&"something"
    "something"
    不确定某个变量是否已经被定义:var mynum=mynum||10;
  • 比较运算符

    注意:NaN == NaN值为false

2.3.5 undefined与null

访问某个不存在或未赋值的变量时会得到undefined值。javascript会自动将声明时没有进行初始化的变量设为undefined。

//试图使用一个不存在的变量,会得到这样错误信息
>>>foo
foo is not defined
>>>typeof foo
"undefined"
//声明一个变量时没对其赋值,调用该变量时不会出错,但typeof仍为undefined
>>>var somevar;
>>>somevar
>>>typeof somevar
"undefined"

而null值完全是另外一回事,它不能通过javascript来自动赋值,只能由我们的代码来完成。

>>>var somevar=null;
null
>>>somevar
null
>>>typeof somevar
"object"

尽管两者差别微乎其微,但有时也很重要。

>>>var i=1+undefined;i;
NaN
>>>var i=1+null;i;
1

这是因为null和undefined在被转换为其他基本类型时,方法存在一定区别。

转换成数字:
>>>1*undefined
NaN
>>>1*null
0 转换成布尔值:
>>>!!undefined
false
>>>!!null
false 转换成字符串
>>>""+null
"null"
>>>""+undefined
"undefined" >>>undefined == null
true

2.5数组

声明一个空数组变量:

>>>var a=[];
>>>typeof a;
"object"
>>>var a=[1,2,3];
输入数组名,就能打印该数组中的所有内容
>>>a
[1,2,3]
访问数组a首元素
>>>a[0]
1
2.5.1增加、更新数组元素
//更新
>>>var a=[1,2,3];
>>>a[2]='three';
>>>a
[1,2,"three"] //新增
>>>a[3]="four";
"four"
>>>a
[1,2,"three","four"]

如果新元素被添加的位置与原数组末端之间存在一定的间隔,那么之间的元素将会被自动设定为undefined值。

>>>var a=[1,2,3];
>>>a[6]='new';
"new"
>>>a
[1,2,3,undefined,undefined,undefined,"new"]
2.5.2删除元素

delete操作符:不能真正移除一个元素,但它能将其设定为undefined。元素被删除后,数组的长度并不会受到影响。

>>>var a=[1,2,3];
>>>delete a[1];
true
>>>a
[1,undefined,3]
>>>a.length
3
2.5.3 数组的数组

通常情况下,我们可以在数组中存放任何类型的值,包括另一个数组。

>>>var a=[1,"two",false,null,undefined];
>>>a
[1,"two",false,null,undefined]
>>>a[5]=[1,2,3];
[1,2,3]
>>>a
[1,"two",false,null,undefined,[1,2,3]]
>>>a[5][1]
2 //可以通过这种访问数组方式来获取某个字符串中的特定字符
>>>var s='one';
>>>s[0];
"o"
>>>s[1];
"n"

2.6 条件与循环

  • if条件表达式

    检查变量是否存在

      检查程序中是否存在一个叫做somevar的变量,如果存在,就将变量result设置为yes。
    >>>var result='';
    >>>if(somevar){result='yse';}
    somevar is not defined
    >>>result;
    ""

    说明:首先,该段代码会产生一个警告信息,显得有些多次一举;其次,就算if(somevar)返回的是false,也并不意味着就一定没有定义,它也可以是任何一种被初始化为falsy值(如false或0)的已声明变量。

    所以在检查变量是否存在时,更好的选择是使用typeof。

      >>>if(typeof somevar!=="undefined"){result='yes';}
    >>>result;
    ""

    需要注意的是,如果这里的somevar是一个已经声明但尚未赋值的变量,结果也是相同的。也就是说,实际上是在用typeof测试一个变量是否已经被初始化(或者说测试变量值是否为undefined)。

      >>>var somevar;
    >>>if(typeof somevar!=="undefined"){result='yes';}
    >>>result;
    "" >>>somevar=undefined
    >>>if(typeof somevar!=="undefined"){result='yes';}
    >>>result;
    ""

    三元运算符:var result=(a===1)?"a is one":"a is ont noe";

  • switch语句

  • while、do-while、for,以及for-in循环。

    for-in循环最适合的场合是对象以及常规for循环的数组。

javascript面向对象编程笔记(基本数据类型,数组,循环及条件表达式)的更多相关文章

  1. javascript面向对象编程笔记

    对象:一切事物皆是对象.对象是一个整体,对外提供一些操作.比如说一个收音机是一个对象,我们不需要知道它的内部结构是什么,只需要会使用外部的按钮就可以使用收音机. 面向对象:面向对象语言的标志是他们都有 ...

  2. javascript面向对象编程笔记(函数)

    第三章 函数 3.1 什么是函数 一般来说,函数声明通常由以下几部分组成: function子句 函数名称 函数所需参数 函数体 return子句.如果某个函数没有显示的返回值,默认它的返回值为und ...

  3. javascript面向对象编程笔记(函数之闭包)

    3 函数 3.5 闭包(closures) 3.5.1 作用域链 与很多程序设计语言不同,javascript不存在大括号级的作用域,但它有函数作用域,即在函数内定义的变量在函数外是不可见的.但如果该 ...

  4. 读书笔记-JavaScript面向对象编程(一)

    PDF下载链接: http://pan.baidu.com/s/1eSDSTVW 密码: 75jr 第1章 引言 1.1 回顾历史 1.2 变革之风 1.3 分析现状 1.4 展望未来 1.5 面向对 ...

  5. 《JavaScript面向对象编程指南(第2版)》读书笔记(一)

    目录 一.对象 1.1 获取属性值的方式 1.2 获取动态生成的属性的值 二.数组 2.1 检测是否为数组 2.2 增加数组长度导致未赋值的位置为undefined 2.3 用闭包实现简易迭代器 三. ...

  6. 《JavaScript面向对象编程指南(第2版)》读书笔记(二)

    <JavaScript面向对象编程指南(第2版)>读书笔记(一) <JavaScript面向对象编程指南(第2版)>读书笔记(二) 目录 一.基本类型 1.1 字符串 1.2 ...

  7. 《JavaScript面向对象编程指南》读书笔记②

    概述 <JavaScript面向对象编程指南>读书笔记① 这里只记录一下我看JavaScript面向对象编程指南记录下的一些东西.那些简单的知识我没有记录,我只记录几个容易遗漏的或者精彩的 ...

  8. 《JavaScript面向对象编程指南》读书笔记①

    概述 JavaScript快忘完了,想看一本专业书拾遗,所以看了这本<JavaScript面向对象编程指南>. 个人觉得这本书讲的很透彻很易懂,一些原来有疑惑的地方在这本书里面豁然开朗,看 ...

  9. JavaScript面向对象编程学习笔记

    1  Javascript 面向对象编程 所谓"构造函数",其实就是一个普通函数,但是内部使用了this变量.对构造函数使用new运算符,就能生成实例,并且this变量会绑定在实例 ...

随机推荐

  1. SSM项目启动报错:Failed to read candidate component class

    SSM项目启动报错:Failed to read candidate component class 换成3.1又没有问题,换成3.2又不行,查看编译环境用的是1.8,将1.8降为1.7,问题解决,服 ...

  2. 2、Locust压力测试 实战

    创建测试脚本 创建Test()类继承TaskSet类 创建beigong() 方法表示一个行为,访问北弓官网首页.用@task() 装饰该方法为一个任务.1表示一个Locust实例被挑选执行的权重,数 ...

  3. Java 设计模式之 装饰者模式

    装饰者模式(Decorator Pattern): 概述:装饰模式是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能.它是通过创建一个包装对象,也就是装饰来包裹真实的对象 特点: (1) ...

  4. print的简单使用

    import time num=20 for i in range(num): print("#", end="") 结果如下: 加个强制刷新 num=20 f ...

  5. 怎样有效防止ddos

    怎样有效防止ddos?当我们发现服务器被DDoS攻击的时候,不要过度惊慌失措,先查看一下网站服务器是不是被黑了,找出网站存在的黑链,然后做好网站的安全防御,开启IP禁PING,可以防止被扫描,关闭不需 ...

  6. 22-5-join

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. nginx-rtmp-module 指令详解

    译序:截至 Jul 8th,2013 官方公布的最新 Nginx RTMP 模块 nginx-rtmp-module 指令详解. Core rtmp 语法:rtmp { ... } 上下文:根 描述: ...

  8. Ubuntu 常用软件记录【持续更新】

    主机之间通信 Shell 管理器: asbru-cm 文件传输工具: filezilla 虚拟化 Virtual box

  9. ES6面试 知识点汇总(全)

    近期在复习ES6,针对ES6新的知识点,以问答形式整理一个全面知识和问题汇总.(全干货,适合对ES6有一定理解的同学复习,以及ES6面试.) 一.问:ES6是什么? 答: ES6是新一代的JS语言标准 ...

  10. curl 命令帮助及使用

    目录 一.简介 二.curl 帮助文档 三.curl 的使用 前言 刚接触 curl 就发现它的非常强大.奈何帮助文档全是英文,看起来贼费劲.无奈只能硬着头皮用自己蹩脚的英语和翻译软件硬生生的翻译了一 ...