web前端-js基础-javascript高级程序设计(第三版)

严格模式和非严格模式的区别 'use strict'

  1. 严格模式下声明变量的时候必须带上var, 否则会报ReferenceError错误.
  2. 严格模式下不可使用eval或者arguments作为变量名, 否则会报语法错误.

基本的数据类型

  1. Undefined
  2. Null
  3. Boolean
  4. Number
  5. String
  6. Object 复杂数据类型, 本质由一组无序的键值对组成的.

typeof操作符, 因为ECMAScript是松散类型, 所以可以使用typeof来检测给定变量的数据类型. 返回的值都是字符串类型, 可能返回的值如下:

  1. undefined 如果这个值未定义
  2. boolean 如果这个值是布尔值
  3. string 如果这个值是字符串
  4. number 如果这个值是数值
  5. object 如果这个值是对象或者null
  6. function 如果这个值是函数

Number类型, 数值转换, Number() 函数转换规则如下

  1. 如果是Boolean类型, true 和 false分别被转换成 1和0;
  2. 如果是数字值, 只是简单的传入和反悔;
  3. 如果是null值, 则被转换成0;
  4. 如果是undefined , 则被转换成 NaN(Not a Number 不是一个数字), NaN类型是一个Number类型, typeof Number(undefined) == 'number' , 但是NaN != false
  5. 如果是字符串(string), 遵循一下规则:
    5.1 如果字符串中只包含数字 , 则转换成对应的数字, 如: Number('123') 则转换成数值型的123, 如果是Number('011') 则转换成11, 前面的先导0会被忽略.
    5.2 如果字符串中包含有效的浮点数字, 如:Number('1.1'), 则被转换成1.1, 同样如果前面有先导0, 则也会忽略.
    5.3 如果字符串中包含有效的十六进制格式, 则将其转换成相同的十进制, 如:Number('0xf') 被转换成15.
    5.4 如果字符串是空的, 不包含任何字符, 则将其转换成0, 如: Number('') == 0;
    5.5 如果字符串中包含除以上之外的字符, 则都被转换成NaN;
  6. 如果是对象, 则先调用对象的valueOf()方法, 然后依照前面的规则进行转换返回后的值, 如果结果是NaN, 则调用对象的toString()方法, 然后再次调用前面的规则转换返回后的字符串值;
    6.1 示例:
// Number类型对象
var a = new Number(1);
// 1. 调用 valueOf() 方法
var b = a.valueOf();
console.log(Number(b));// 如果这个值是NaN, 则调用toString()方法, 然后在转换
// String类型对象
var c = new String('123');
var d = c.valueOf();
console.log(Number(d));// 同上

parseInt()函数

因为Number()函数在转换字符串的时候比较复杂而且不够合理, 所以在处理整数的时候更常用parseInt()

parseInt()在转换字符串的时候, 更多的是看其是否符合数值模式, 它会忽略字符串前面的空格, 知道找到第一个非空格的字符, 如果第一个字符不是数字也不是负号, parseInt() 就会反悔NaN, 也就是说parseInt('')会返回NaN, 而Number('')返回0, 如果第一个字符是数字, 则parseInt()会解析第二个字符, 知道解析完所有后面的字符或者遇到了非数字字符, 如:'1234hello', 则parseInt()在解析到h的时候就发现不是数字字符, 则就停止解析, 直接返回 1234, 所以parseInt('1234hello') 返回 1234, hello会被完全忽略, 类似, 22.5 被解析成 22 , 以为小数点不是数字字符.

注意点:
parseInt() 函数在解析八进制字面量的字符串的时候, ECMAScript 3和ECMAScript 5有分歧;
如: var num = parseInt('070'); ECMAScript 3会解析成56(八进制), 而ECMAScript 5会解析成70(十进制), 原因是在ECMAScript 5 JavaScript引擎中, parseInt() 函数已经不具有解析八进制的能力了, 因此会导致前面的先导0 被忽略, 从而将这个值解析成十进制的 70, 即使在非严格模式下也是如此.
为了消除以上困惑, parseInt()函数提供了第二个参数, 第二个参数就是来指定前面要转换的字符串是几进制的, 如下:

var num1 = parseInt('10', 2); // 结果就是 2 (按照二进制进行解析)
var num2 = parseInt('10', 8); // 结果就是 8(按照八进制进行解析)
var num3 = parseInt('10', 16); // 结果就是 16(按照十六进制进行解析)
var num4 = parseInt('10', 10) ; // 结果就是10( 按照十进制进行解析)

parseFloat()函数

parseInt()函数不同的是它始终会解析到字符串的末尾, 或者解析到遇见一个无效的浮点数字字符为止, 如果浮点数中出现两个点的时候, 则第二个点无效, 则停止解析, 如:parseFloat('1.22.3')则被解析成1.22, parseFloat('1.22hsdfsd');则被解析成1.22, 因为第二个点和h都不是有效的浮点数字字符.

转换为字符串

Number, Boolean, Object, String 这些类型都有toString()方法.
js中处理null和undefined没有toString()方法, 其他的都有此方法, 此方法就是返回一个字符串副本.

对数情况下使用toString()的时候不必穿参数, 也可通过传递基数来输出二进制, 八进制, 十六进制表示的值. 如:

var n = 10;
console.log(n.toString()); // '10'
console.log(n.toString(2)); // '0101'
console.log(n.toString(8)); // '12'
console.log(n.toString(16)); // 'a'

当我们在不知道值是不是null或者undefined的时候我们可以使用String(), 这个函数可以将任意类型的值转换成字符串, 规则如下:

  1. 如果值有toString()方法, 则调用该方法, 并返回相应的结果;
  2. 如果值是null则返回字符串的'null'
  3. 如果值是undefined 则返回字符串 'undefined'

如果要把值转换成字符串, 还有一个方法就是这个值加上一个空字符串即可: 如:

var a = 123;//这个是值类型
var b = a + ''; //这个的结果是String类型
console.log(typeof b); // 打印结果是 string

未完待续...

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

推荐阅读更多精彩内容