【js高程第3章】— 基本概念

一、杂项

1.严格模式下,eval和arguments不能作为标识符或属性名

2.5种简单数据类型:Undefined、Null、Boolean、Number、String。1种复杂数据类型:Object

3.typeof可能返回6种结果,注意两种返回结果:

"object":对象或null

"function":函数

4.对象变量初始化,用null


二、Number类型:

1.非严格模式下:0开头代表8进制,如果0之后的数字超出了8进制的范围,则忽略前导0,按照10进制解析。如:079 --> 解析为79。

2.浮点数:最高精度17位小数。注意,0.1+0.2 === 0.30000000000000004 (15个0),0.1+0.2 !== 0.3。

3.NaN:isNaN()在接收到一个值之后,会尝试将这个值转换为数值,如果转换失败,则判定为NaN。

4.Number():Number(null) === 0,Number(undefined) === NaN,Number("0xf") === 15。

5.parseInt():转换时,根据字符串前导0或0x判断按照几进制来转换。

                    eg:parseInt("070");//56(8进制)

                    第二个参数:指定按照几进制识别。

                    eg:parseInt("AF",16);//175 (可以不带0x)

6.parseFloat():与parseInt()的区别 —— 转换时,第一个小数点有效,始终忽略前导0,只解析十进制值。


三、String类型:

1.toString():null、undefined没有toString()方法。通常不必传参数。但,调用数值的toString()方法时,可以传递一个参数,指明按照几进制解析当前数值,并输出为字符串形式。

                  eg:let num = 10; 

                         num.toString();//"10"

                         num.toString(2);//"1010"

                         num.toString(8);//"12"

2.String():String(null);//"null";String(undefined);//"undefined";有toString()方法的值,使用String()转换,默认调用toString()方法。


四、操作符:

1.一元加+:对非数值使用时,等同于Number()的转换规则。

2.按位非:本质 —— 操作数的负数减1。num2 = -num1 - 1相当于num2 = ~num1,按位非速度更快。

3.左移右移:

左移:<<     有符号右移(首位符号位不动,移其他位):>>    无符号右移(所有位一起右移):>>>

4.相等和不相等(==):

规则:(1)如果有一个操作数是布尔值,先将其转换为数值。

                eg:false == "false"; //false。false转为数值为0,0和"false"不等。

                     false == "0";//true

           (2)如果一个操作数是对象,另一个不是,则调用对象的valueOf方法,得到基本类型后再进行比较。

           (3)如果两个操作数都是对象,则比较它们是不是同一个对象。两个操作数指向同一个对象,则相等。

           (4)null == undefined

           (5)比较相等性之前,不能将null和undefined转换成其他任何值。所以,null != 0,undefined != 0。


五、语句:

1.for-in:遍历对象所有可枚举的属性,包括原型属性。输出的属性名顺序不可预测,可能因浏览器而异。

            建议在使用for-in前,先确认遍历对象的值不是null或undefined。

2.label语句(与break和continue配合使用):

形如:start:for(var i=0;i<count;i++){

                alert(i);

           }

start为for这个循环的名称,用于指代当前这个for循环。

3.break和continue

区别:break立即退出循环。continue强制继续执行循环,continue之后的语句会被忽略,继续走for循环的下一个值。

eg:

break + label

var num = 0;

outermost:

for(var i=0;i<10;i++){

    for(var j=0;j<10;j++){

        if(i==5 && j==5){

            break outermost; //退出outermost这个循环。即,退出内部外部两个for语句

        }

        num++;

    }

}

alert(num); //55

continue + label

var num = 0;

outermost:

for(var i=0;i<10;i++){   

    for(var j=0;j<10;j++){       

        if(i==5 && j==5){           

            //继续outermost这个循环。i==5 && j==5时,num++不走,直接继续走外部循环

            continue outermost; 

        }           

        num++;   

    }    

}

alert(num); //95

4.with语句(开发大型应用程序时,不建议使用):

with(location){ //对location对象进行设定

    var qs = search.substring(1); //相当于var qs = location.search.substring(1); 

    var hostName = hostname;  

    var url = href;

}

5.switch语句:

对比值时,使用的是全等(===)操作符。

合并两种情形:

switch(i){

    case 25:

        /*合并两种情形*/

    case 35:

        alert("25 or 35");

        break;

    case 45:

        alert("45");

        break;

}


六、函数(没有重载,可通过传入参数个数,即arguments的长度,模仿重载)

1.严格模式对函数的限制:

不能把函数命名为eval或arguments

不能把参数命名为eval或arguments

不能出现两个参数同名的情况

2.关于arguments的特性,需要注意一点:

function doAdd(num1,num2){

 /*严格模式下,如果调用时只传一个参数,num2仍然为undefined,且重写arguments的值会导致语法错误(代码将不会执行)*/

    arguments[1] = 10;

    alert(arguments[0] + num2); //得到num1 + 10的结果

}

如上:

手动修改了arguments[1]的值,num2的值也会同步改变。但注意,它们的内存空间是独立的,只是值会同步。

如果只传入了一个参数,那么arguments[1]的值不会反应到命名参数(即num2)中。

doAdd(2); //NaN(num2 === undefined)

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

推荐阅读更多精彩内容

  • "use strict";function _classCallCheck(e,t){if(!(e instanc...
    久些阅读 2,028评论 0 2
  • 第一章: JS简介 从当初简单的语言,变成了现在能够处理复杂计算和交互,拥有闭包、匿名函数, 甚至元编程等...
    LaBaby_阅读 1,660评论 0 6
  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 4,145评论 0 13
  • 有人说过,很多弯路到最后都成了直路,所有的坑到最后也都成了坦途;所谓的直路和坦途并不是摆在眼前的,都是不断的的...
    老衲法号一眉道人阅读 1,324评论 0 4
  • 一个时代,说不得;想不得;谈不得;碰不得;众人避而远之,唯唯诺诺,每每触及就必定有受伤害之人。 法治社会,依法治国...
    一毛钱的快乐阅读 160评论 0 0