巩固JavaScript系列--01数据类型和函数

最近感觉校招也快到了,感觉自己的知识体系还是挺乱的,所以拿起了红宝书再仔细读读,对知识点再巩固巩固,想每次学习完对整体的一个知识点总结总结,写下了自己的JavaScript系列学习。

script标签

在开始写数据类型之前,想对<script>标签记下几点内容。

script标签有以下6个属性

1.async:可选。表示应该立即下载脚本,但不妨碍页面中的其他操作,比如可以下载其他资源或等待加载其他脚本。只对外部脚本文件有效。

2.charset:可选。表示通过src属性指定的代码的字符集。由于大多数浏览器会忽略它的值,所有很少用

3.defer:可选。表示脚本可以延迟到文档完全被解析和显示之后再执行。只对外部文件有效。

4.language:已放弃。

5.src:可选。表示包含要执行的外部文件。

6.type:可选。表示编码使用的脚本语言的内容类型

这里重点记下两个比较特殊的属性async和defer

defer:设置defer的脚本会在整个页面都解析完毕之后再执行。

async:指定async属性的目的是不让页面等待其脚本下载和执行,从而异步加载页面的其他内容。

数据类型

ECMAScript中有5种简单的数据类型(也称为基本数据类型):Undefined、Null、Boolean、Number和String

还有一种复杂数据类型:Object。Object本质是由一组无序的名值(键值)组成。

1. Undefined类型

Undefined类型的值就只有一个undefined。

var name;
alert(name == undefined)    //true

从上面可以看出,name只定义,未初始化。它的默认值为undefined。与下面代码一致。

var name=undefined;
alert(name == undefined)    //true

其实我们再没必要为它赋值undefined,因为它默认的值就是undefined。

2. Null类型

Null类型的值也只有一个,即null。从逻辑角度来看,null值表示一个空对象指针,这也是使用typeof操作符检测null值时会返回object类型的原因。

var people=null
alert(typeof people)  //object

如果定义的变量准备在将来用于保存对象,那么最好将该变量初始化为null而不是其他值(像默认的undefined)

undefined值是派生自null值的,因此下面代码返回的是true

alert(alert( null == undefined))  //true

但如果是全等操作的话,返回的是false

alert(alert( null === undefined))  //false

无论什么时候都没有必要把一个变量的值显式的设置为undefined,可是同样的规则对应null却是不适用。换句话说,只要意在保存对象的变量还没有真正的保存对象,就应该为其设置null值。这样做的目的不仅体现null做为空对象指针的惯例,而且也有助于进一步区分null和undefined。这也是null和undefined的只要区别。

3. Boolean类型

Boolean类型有两个值即true和false。Boolean类型的知识点主要是下面这个:

可以对任何数据类型调用Boolean()函数,而且总会返回一个Boolean值。

除了 0、-0、''、NaN、null、undefined、false对其使用Boolean函数返回的是假(false),其余返回的是真(true)

在流控制语句中(如if语句),它会自动执行相应的Boolean转换。请看下面代码:

var name='hmz';
if (name){
    alert('my name is hmz')  //my name is hmz
}

因为name被自动执行相应的Boolean转换,返回的是true

4. Number类型

  1. 浮点数值: 浮点数值需要的内存空间是保存整数值的两倍,因此ECMAScript会不失时机地将浮点数值转换为整数值。浮点数值计算会产生舍入误差,比如0.1+0.2不会等于0.3,而是等于0.3000000...0004,所以千万不要使用以下代码,你会发现代码并不会去实现alert:
var a=0.1,b=0.2;
if(a+b == 0.3){       //不要做这样的测试
    alert('go this')
}
  1. 数值范围: isFinite()函数在参数位于最大值(Number.MAX_VALUE)和最小值(Number.MIN_VALUE)之间会返回true。

  2. NaN: NaN(Not a Number)是一个特殊的数值。NaN有两个特点①任何涉及NaN的操作都会返回NaN;②NaN跟任何值都不相等,包括他自己本身。

根据NaN的两个特点ECMAScript定义了isNaN()函数。isNaN()函数传入的参数会被想转换为数值再判断,参数不会转换为数值的函数会返回true,否则函数会返回false

alert(isNaN(NaN))  //true     不能被转换为数值
alert(isNaN(10))   //false    10是数值
alert(isNaN('blue'))  //true  不能被转换为数值
alert(isNaN('10')) //false   '10'会被转换为10
alert(isNaN(true))  //false   true会被转换为1
  1. 数值转换
    可以转换为数值的函数有Number()、parseInt()、parseFloat()。Number()函数可以用于任何数据类型,而parseInt()和parseFloat()专门用于把字符串转换为数值。

parseInt()转化为整数,可以传入第二个参数,告诉浏览器按几进制进行解析数据,如果不传第二个参数,默认是10进制
parseFloat()转化为浮点数,只解析整数,故没有第二个参数。

5. String类型

转换为字符的函数有:toString()和String()。

toString():①数值、布尔、对象、字符串都有toString()方法。但是null和undefined没有toString()方法。②多数情况下,toString()方法不必传参,但也可以为其传一个参数,该参数可以将num.toString(2|8|10|16)返回几进制的字符串表示

String():在不知道要转换的值是不是undefined和null的情况下,还可以使用String()函数。这个函数能将任何类型的值转换为字符串。

6. Object类型

ECMAScript中的对象其实就是一组数据和功能的集合。

Object的每个实例都有下列的属性和方法:

  1. constructor:保存着用于创建当前对象的函数,即构造器。
  2. hasOwnProperty:用于检查给定的属性在当前对象实例中是否存在(而不是在实例的原型中)。如:people.hasOwnProperty('name')
  3. isPrototypeOf(object): 检测传入的对象是否是当期对象的原型
  4. propertyIsEnumerable(propertyName): 检测传入的属性能否使用for-in进行枚举
    5.toLocaleString():返回对象的字符串表示,该字符串与执行环境对应
  5. toString():返回对象的字符串表示
  6. valueOf:返回对象的字符串、数组或布尔的表示。通常与toString()的返回值相同

在ECMAScript中Object是所有对象的基础,因此所有对象都具有上面这些基本的属性和方法。

函数

函数中个人感觉想要去注意的是函数的返回值和函数的参数。

  1. 函数的返回值:函数中要么让函数始终都返回一个值,要么永远都不要返回值。如果未指定返回值的函数,那么它返回的是一个特殊的undefined值
  2. 理解参数:

ECMAScript函数传递参数比较灵活,定义函数参数也比较灵活。原因在于ECMAScript的参数在内部是用一个数组来表示的。函数接收到的是这个数组,而不关心数组中包含哪些参数。实际上在函数体内可以通过arguments对象来访问这个参数数组,从而获取传递给函数的每一个参数。

arguments对象只是与数组类似(他并不是Array的实例),因为可以使用[ ]来访问它的每一个元素,使用length属性可以确定传递进来多少参。arguments的length由传入的参数个数决定的,不是由定义函数时的命名参数的个数决定的。对于没有传递值的命名参数将被自动赋予undefined,这就跟定义了变量但没有初始化一样。

函数实现伪重载

function doAdd() {
    if (arguments.length == 1){
        alert(arguments[0])
    }
    else if (arguments.length == 2){
        alert(arguments[0] + arguments[1])
    }
}
doAdd(10)   //10
doAdd(10,20)  //30

上面利用arguments的length可以实现伪重载,但ECMAScript中是没有真正的重载(方法名一样,接收的参数的类型或数量不同),因为ECMAScript不存在函数签名(函数签名由参数个数与其类型组成)的特性!!!函数名相同的情况下ECMAScript中前面定义的函数会被后面定义的函数所覆盖,故而没有真正的重载,但可以使用上面的代码实现伪重载。

结尾

时间过的很快,不知不觉快要八月中旬了,各个公司也开始陆续开放网申了,不由的会想太多东西,故而感觉最近的节奏感没跟上,上周在学Vue感觉也是不是很好,没有把真正的心思放在学Vue上面,搞七搞八的一周也过去了。现在自己就想静静,外面的世界如何如何,你的能力有限,大可不必在乎,现在呢要做的只有好好的静下心,坚持吧,一切顺其自然!再说写这个JavaScript系列,我也不知道我会写多少,当我还是会尽自己最大的努力去总结。

于 厦门高崎新村 自己的小屋

本文首发于个人博客>> shineTomorrow--一个路上慢慢行走的前端人

参考文献:《JavaScript高级程序设计》

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

推荐阅读更多精彩内容