JavaScript高级程序设计(第三版)3-4章

Menu

  • 第3 章 基本概念
    • 数据类型

第3 章 基本概念

数据类型
  • "undefined"——如果这个值未定义;
  • "boolean"——如果这个值是布尔值;
  • "string"——如果这个值是字符串;
  • "number"——如果这个值是数值;
  • "object"——如果这个值是对象或 null;
  • "null"——如果定义的变量准备在将来用于保存对象,那么最好将该变量初始化为 null 而不是其他值。 undefined 值是派生自 null 值的;
  • "function"——如果这个值是函数
var message = "some string";
alert(typeof(message)); // "string"

Number (数字)
  • isFinite(number)函数:
    • 这个函数在参数位于最小与最大数值之间时会返
      回 true;
  • NaN:
    • NaN,即非数值(Not a Number)是一个特殊的数值;
    • 对NaN做任何计算都会返回 NaN;
    • 只有 0 除以 0 才会返回 NaN,正数除以 0 返回 Infinity,负数除以 0 返回-Infinity;
    • isNaN()函数:
      • 判断传入的是否“不是数字”;
alert(isNaN(NaN)); //true
alert(isNaN(10)); //false( 10 是一个数值)
alert(isNaN("10")); //false(可以被转换成数值 10)
alert(isNaN("blue")); //true(不能转换成数值)
alert(isNaN(true)); //false(可以被转换成数值 1)

数值转换 (page48)
  • 把非数值转换为数值: Number()、 parseInt()和 parseFloat();

  • Number()函数的转换规则如下:

    • 如果是 Boolean 值, true 和 false 将分别被转换为 1 和 0。
    • 如果是数字值,只是简单的传入和返回。
    • 如果是 null 值,返回 0。
    • 如果是 undefined,返回 NaN。
    • 如果是字符串,遵循下列规则:
      • 如果字符串中只包含数字(包括前面带正号或负号的情况),则将其转换为十进制数值,即"1"
        会变成 1, "123"会变成 123,而"011"会变成 11(注意:前导的零被忽略了);
      • 如果字符串中包含有效的浮点格式,如"1.1",则将其转换为对应的浮点数值(同样,也会忽
        略前导零);
      • 如果字符串中包含有效的十六进制格式,例如"0xf",则将其转换为相同大小的十进制整
        数值;
      • 如果字符串是空的(不包含任何字符),则将其转换为 0;
      • 如果字符串中包含除上述格式之外的字符,则将其转换为 NaN。
    • 如果是对象,则调用对象的 valueOf()方法,然后依照前面的规则转换返回的值。如果转换
      的结果是 NaN,则调用对象的 toString()方法,然后再次依照前面的规则转换返回的字符
      串值。
  • parseInt() 函数:

    • 语法: parseInt(string, radix)
    • parseInt() 函数可解析一个字符串,并返回一个整数 ;
    • radix可选。表示要解析的数字的基数。该值介于 2 ~ 36 之间。如果省略该参数或其值为 0,则数字将以 10 为基础来解析。如果它以 “0x” 或 “0X” 开头,将以 16 为基数。如果该参数小于 2 或者大于 36,则 parseInt() 将返回 NaN。
    • var num = parseInt("0xAF", 16); //175
  • parseFloat() 函数:

    • parseFloat()只解析十进制值;
var num1 = parseFloat("1234blue"); //1234 (整数)
var num2 = parseFloat("0xA"); //0
var num3 = parseFloat("22.5"); //22.5
var num4 = parseFloat("22.34.5"); //22.34
var num5 = parseFloat("0908.5"); //908.5
var num6 = parseFloat("3.125e7"); //31250000

String类型 (page50)
  • 转换为字符串

  • str.toString()

  • 除了null 和 undefined之外的数据类型都有toString()方法;

  • 默认情况下, toString()方法以十进制格式返回数值的字符串表示。而通过传递基数, toString()可以输出以二进制、八进制、十六进制,乃至其他任意有效进制格式表示的字符串值。

  • String()函数:

    • String()函数能够将任何类型的值转换为字符串。
      • 如果值有 toString()方法,则调用该方法(没有参数)并返回相应的结果;
      • 如果值是 null,则返回"null";
      • 如果值是 undefined,则返回"undefined"。

Object类型 (page53)
  • 创建实例:
    • var o = new Object();
  • Object 的每个实例都具有下列属性和方法:
    • constructor:保存着用于创建当前对象的函数。对于前面的例子而言,构造函数(constructor)
      就是 Object()。
    • hasOwnProperty(propertyName):用于检查给定的属性在当前对象实例中(而不是在实例
      的原型中)是否存在。其中,作为参数的属性名(propertyName)必须以字符串形式指定(例
      如: o.hasOwnProperty("name"))。
    • isPrototypeOf(object):用于检查传入的对象是否是传入对象的原型(第 5 章将讨论原
      型)。
    • propertyIsEnumerable(propertyName):用于检查给定的属性是否能够使用 for-in 语句
      (本章后面将会讨论)来枚举。与 hasOwnProperty()方法一样,作为参数的属性名必须以字符
      串形式指定。
    • toLocaleString():返回对象的字符串表示,该字符串与执行环境的地区对应。
    • toString():返回对象的字符串表示。
    • valueOf():返回对象的字符串、数值或布尔值表示。通常与 toString()方法的返回值
      相同。
操作符 (page54)
  • 一元操作符
    • 递增和递减操作符有两个版本:前置型和后置型。
      • ++i, --i, i++,i-- ;
    • 前置型:
      • 执行前置递增和递减操作时,变量的值都是在语句被求值以前改变的。(在计算机科学领域,这种
        情况通常被称作副效应。)
    var i1 = 10;
    var i2 = 20;
    var re = (--i1) + i2;  // 29
  • 后置型:
    • 后置递增和递减与前置递增和递减有一个非常重要的区别,即递增和递减操作是在包含它们的语句被求
      值之后才执行的。
var num1 = 2;
var num2 = 20;
var num3 = num1-- + num2; // 等于 22
var num4 = num1 + num2; // 等于 21
  • 递增和递减操作符遵循下列规则:

    • 在应用于一个包含有效数字字符的字符串时,先将其转换为数字值,再执行加减 1 的操作。字
      符串变量变成数值变量。
    • 在应用于一个不包含有效数字字符的字符串时,将变量的值设置为 NaN(第 4 章将详细讨论)。
      字符串变量变成数值变量。
    • 在应用于布尔值 false 时,先将其转换为 0 再执行加减 1 的操作。布尔值变量变成数值变量。
    • 在应用于布尔值 true 时,先将其转换为 1 再执行加减 1 的操作。布尔值变量变成数值变量。
    • 在应用于浮点数值时,执行加减 1 的操作。
    • 在应用于对象时,先调用对象的 valueOf()方法(第 5 章将详细讨论)以取得一个可供操作的值。然后对该值应用前述规则。如果结果是 NaN,则在调用 toString()方法后再应用前述规则。对象变量变成数值变量;
  • 一元加和减操作符

    • 加号(+)放在数值前面,对数值不会产生任何影响,不过,在对非数值应用一元加操作符时,该操作符会像 Number()转型函数一样对这个值执行转换。如:布尔值 false 和 true 将被转换为 0 和 1。字符串值会被按照一组特殊的规则进行解析,而对象是先调用它们的 valueOf()和(或) toString()方法,再转换得到的值;
  • 布尔操作符

    1. 逻辑非
    • 逻辑非操作符由一个叹号(!)表示;
    • 如果操作数是一个对象,返回 false;
    • 如果操作数是一个空字符串,返回 true;
    • 如果操作数是一个非空字符串,返回 false;
    • 如果操作数是数值 0,返回 true;
    • 如果操作数是任意非 0 数值(包括 Infinity),返回 false;
    • 如果操作数是 null,返回 true;
    • 如果操作数是 NaN,返回 true;
    • 如果操作数是 undefined,返回 true。
    • 下面几个例子展示了应用上述规则的结果:
alert(!false); // true
alert(!"blue"); // false
alert(!0); // true
alert(!NaN); // true
alert(!""); // true
alert(!12345); // false
  • 得到数值真正对应的布尔值:
alert(!!"blue"); //true
alert(!!0); //false
alert(!!NaN); //false
alert(!!""); //false
alert(!!12345); //true
    1. 逻辑与
    • 逻辑与操作属于短路操作,即如果第一个操作数能够决定结果,那么就不会再对第二个操作数求值。
    1. 逻辑或
    • 逻辑或操作符也是短路操作符。也就是说,如果第一个操作数的求值结果为true,就不会对第二个操作数求值了。如果两个都是false那就返回第二个操作数;
  • 加减操作符

    • 数字与字符串相加则是连结;
      • document.write(10 + "20"); //1020
    • 数字与字符串相减则是算术运算;
      • document.write(20 - "10"); //10
function (函数) page80
  • 函数声明
    function funcName(args){
        some_statement;
    }
  • 理解参数
    • ECMAScript 函数不介意传递进来多少个参数,也不在乎传进来参数是什么数据类型。
    • 如果声明函数时,有2个形参,使用函数时,可以传无限多个参数,也可以不传参数,参数会收集在名为arguments的一个数组里。可以用下标来找到并使用参数,如arguments[0];
    • 如果函数定义了一个叫name的形参,在函数体里打印name,但在调用函数时未传实参,那么这个name会变成undefine;
    function sayHi() {
        alert("Hello " + arguments[0] + "," + arguments[1]);
    }  // 如果没传参,参数会变成undefine;

第3 章 基本概念

基本类型和引用类型的值
  • 5 种基本数据类型: Undefined、 Null、 Boolean、 Number 和 String。
  • 引用类型的值是保存在内存中的对象。

动态的属性
  • 对于引用类型的值,我们可以为其添加属性和方法,也可以改变和删除其属性和方法。如果对象不被销毁或者这个属性不被删除,则这个属性将一直存在。
var person = new Object();
person.name = "Nicholas";
alert(person.name); //"Nicholas"
  • 但是,我们不能给基本类型的值添加属性,尽管这样做不会导致任何错误。比如:
var name = "Nicholas";
name.age = 27;
alert(name.age); //undefined
复制变量值
  • 在从一个变量向另一个变量复制基本类型值和引用类型值时:
    • 基本数据类型是复制一份拷贝(修改其中一个变量的值不会影响另一个变量的值);
    • 引用数据类型是复制了指针地址(修改其中一个变量的值会影响另一个变量的值);
检测类型 page90
  • typeof 操作符是确定一个变量是字符串、数值、布尔值,还是 undefined 的最佳工具;
  • 对象或 null,则返回"object";
var s = "Nicholas";
var b = true;
var i = 22;
var u;
var n = null;
var o = new Object();

alert(typeof s); //string
alert(typeof i); //number
alert(typeof b); //boolean
alert(typeof u); //undefined
alert(typeof n); //object
alert(typeof o); //object
  • 检测引用类型的值时,可以用instanceof 操作符;
document.write([1, 2, 3] instanceof Array)  //true

-根据规定,所有引用类型的值都是 Object 的实例。因此,在检测一个引用类型值和 Object 构造函数时, instanceof 操作符始终会返回 true。

alert(person instanceof Object); // 变量 person 是 Object 吗?
alert(colors instanceof Array); // 变量 colors 是 Array 吗?
alert(pattern instanceof RegExp); // 变量 pattern 是 RegExp 吗?
执行环境及作用域
  • 为了内存优化考虑,不要用的全局变量要及时赋值为null;

page101



  • ;
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,386评论 6 479
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,939评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,851评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,953评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,971评论 5 369
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,784评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,126评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,765评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,148评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,744评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,858评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,479评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,080评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,053评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,278评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,245评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,590评论 2 343

推荐阅读更多精彩内容

  • 老母亲又犯病了。 每年秋冬交接之际或者春节前后,母亲的肺心病就容易复发。母亲越来越老了,身体也一年...
    层林尽染林溪边阅读 308评论 0 1
  • 我和你呀 存在微妙的关系 不明不白两相沉默着 我和你呀 彼此做着谎言 为了能更好的爱着伤着 是不是非要点透 才能再...
    沐灬颜阅读 235评论 0 1
  • ·蓝黑的天幕下一片苍茫的白雪,全世界一起沉默。 ·“就是那种主⾓被很多⼈嘲笑,瞧不起,陷害,然后突然掉下...
    佳莹_Pluviophile阅读 380评论 0 3
  • xuqiuhao阅读 218评论 0 0
  • 笔画是指汉字书写时 不间断地一次连续写成的一个线条 它是汉字的最小构成单位 可分为横折、横、竖、竖钩、撇、点、这几...
    雲胡不喜joy阅读 2,811评论 0 5