3 基本概念

1 语法

1、区分大小写

在Javascript中的一切都是区分大小写的,即变量名test 和变量名Test分别表示两个不同的变量

2、标识符

标识符指变量、函数、属性的名字、或者函数的参数
标识符可按照以下格式规则组合起来的一个或者多个字符

① 第一个字符必须是一个字母、下划线或者一个$符号
② 其他字符可以使字母,下划线,美元符号或者数字

按照惯例,标识符会采用驼峰大小写格式,即第一个字母小写,剩下的每个单词的首字母大写,如: fisrtSecond myCar

3、注释

Javascript包含单行注释和块级注释。单行注释以两个斜杠开头,多行注释以一个斜杠和一个星号开头,以一个星号和一个斜杠结尾,如下

//  单行注释
/*********************
*  这是一个多行(块级)注释
*
*******************/
4、严格模式

ECMAScript 5引入了严格模式,严格模式定义了一种不同的解析和执行模型。在严格模式下,一些不确定的行为会被处理,不安全的操作也会抛出异常。要在脚本中启用严格模式,在脚本顶部添加代码 "use strict",它是一个编译指示,告诉支持的Javascript引擎切换到严格模式。
支持严格模式的浏览器包含 IE10+, FireFox 4+, Safari 5.1+,Opera 12 +, Chrome

5、语句

每个语句是以一个分号 (;) 结尾,如果省略分号,解析器自动确定语句的结尾。但不建议省略它,
多条语句是可以合到一个代码块中的,代码块是以 { 开头,以 } 结束。

if (con) {
    alert('test')
}

2 保留字&关键字

一组具有特定用途的关键字,这些关键字可用于表示控制语句的开始和结束,或者用于执行特定的操作,按照规则,关键字是语言保留的,不能用作标识符。
还有一组是保留字,也不能用作标识符,保留字在这门语言中还没有特定的用途,但是他们有可能将来被用作关键字
最好不要使用关键字和保留字作为标识符和属性名

3 变量

Javascript的变量是松散型的,是可以用来保存任何类型的数据。即每个变量是用于保存值的占位符而已。定义变量要使用 var 操作符,后跟变量名

var name

这行代码定义了一个名为name的变量,该变量可以用来保存任何值,像这样未经过初始化的变量,会保存一个特殊的值 undefined。
也可以直接初始化变量,在定义变量的同时就可以设置变量的值
需注意的是: 用var操作符 定义的变量将成为定义该变量的作用域中的局部变量,也就是说如果在函数中使用var定义了一个变量,在函数退出后,这个变量就会被销毁

function myFun() {
    var name = 'jane';
}
myFun()

上面代码中的name变量就是局部变量,在函数被调用之后,变量name就会被销毁,那如果省略掉 var, 就会创建了一个全局变量。

①虽然var省略之后可以创建全局变量,并不推荐这种做法,这样会造成不必要的混乱,给未声明的变量赋值,在严格模式下,会导致抛出ReferenceError错误。
②可以使用一条语句定义多个变量,只要把每个变量用逗号分隔开就可以了。
③在严格模式下,不能定义名为eval和arguments的变量,会导致语法错误。

数据类型

JavaScript中有五种简单的数据类型,undefined, null, Boolean,Number和String。还有一种复杂的数据类型Object, 是由一组无序的名值对组成的。且JavaScript不支持任何创建自定义类型的机制。

1、typeof 操作符

JavaScript是松散类型的,因此需要一种手段来检测给定变量的数据类型,typeof就是这样的操作符, typeof(vars); typeof操作符可能的返回值有
① undefined : 当前值未定义
② boolean : 当前值是布尔值
③ string : 当前值是字符串
④ number : 当前值是数值
⑤ object : 当前值是对象或者null
⑥ function : 当前值是个函数

typeof 是操作符不是函数。

2、undefined 类型

undefined类型只有一个值 undefined, 在使用var声明变量但未初始化时,这个变量的值就是undefined。

var message
alert(message)
alert(age)

第一个警告框弹出 undefined,
第二个警告框是未声明的变量,则导致一个错误。对于未声明过得变量,只能执行一项操作,使用typeof操作符检测数据类型。

对于未初始化和未声明的变量执行typeof操作符都返回了undefined值。

3、Null类型

Null类型同样只有一个值的数据类型,就null
null值表示一个空对象指针,使用typeof操作符检测null值是会返回‘object’
undefined值是派生自null值的,位于null和undefined之间的相等操作符==总会返回true,不过这个操作符出于比较的目的会转换其操作数。
尽管如此,但是两者用途完全不同。在意在保存对象的变量还没有真正保存对象,就应该明确的让该变量保存null值。

4、Boolean类型

Boolean类型有两个字面值 true 和 false。这两个值跟数字值不是一回事,因此true不一定等于1, false也不一定等于0.
这两个值是区分大小写的,即True和False都不是Boolean类型,只是标识符。
在Javascript中所有类型的值都有与这两个值等价的值。
各种数据类型以及对应的转换规则

数据类型 转换为true的值 转换为false的值
Boolean true false
String 任何非空字符串 ""空字符串
Number 任何非零数值(包含无穷大) 0 和 NaN
Object 任何对象 null
Undefined -- undefined
5、Number类型

Number类型是用来表示整数和浮点数,最基本的数值字面量格式是十进制整数,整数还可以通过八进制或者十六进制的字面值来表示。其中,八进制字面量的第一位必须是0, 然后是八进制数字序列。八进制字面量在严格模式下是无效的,会导致支持该模式的Javascript引擎抛出错误。
十六进制字面量的前两位必须是0x,后跟任何十六进制数字(0-9或A~F),字母也可以是小写的。
在进行算术计算时,所有八进制和十六进制表示的数值都将被转换为十进制数值。

  1. 浮点数值
    浮点数值,就是数值中必须包含一个小数点,并且小数点后边必须至少有一位数字。虽然小数点前可以没有整数,但是我们不建议这么写。
    由于浮点数值的内存空间是保存整数值的两倍,因此Javascript会不失时机的将浮点数转换成整数值。浮点数的几个例子如下
var floatNum1 = 1.1
var floatNum2 = 0.1
var floatNum3 = .1
var floatNum4 = 1.  //小数点后没有数字,解析为整数1
var floatNum5 = 1.0  //解析为整数1

对于极大或者极小的数值,可以用e表示法表示浮点数值。e表示法等于额e前面的数值乘以10的指数次幂

var floatNum = 3.125e7    //等于 3.125 * 10的7次方   31250000

浮点数的最高精度是17位小数,但是进行算术计算时其精确度远远不如整数。例如0.1 加 0.2 的结果不是0.3 ,是0.30000000000000004。这个小小的舍入误差会导致无法测试特定的浮点数值。

不要测试某个特定的浮点数值

  1. 数值范围
    Number类型的最小数值保存在Number.MIN_VALUE, 值是5e-324
    Number类型的最大数值保存在Number.MAX_VALUE, 值为1.7976931348623157e+308
    如果计算结果超出了数值范围的值,那么这个数值自动转换成特殊的Infinity值。如果这个数值是负的,为-Infinity(负无穷大)。Infinity是不能参与计算的。想要确认一个数值是不是有穷的,可以使用isFinite()函数。
  2. NaN
    NaN( Not a Number) , 即非数值,这个数值用于表示一个本来要返回数值的操作数未返回数值的情况。任何数值除以非数值都会导致错误,从而停止代码执行。
    NaN的两个特点,

1、任何涉及NaN的操作,都会返回NaN
2、NaN与任何值都不相等,包含NaN本身。

Javascript定义了isNaN()函数。接受一个参数,该参数可以是任何类型。isNaN()接受一个值后,会尝试将这个值转换为数值,任何不能被转换为数值的值都会导致这个函数返回true。
4.数值转换
有3个函数,可以把非数值转换为数值:Number()parseInt()parseFloat()。Number()可以用于任何数据类型;另外两个函数则专门用于吧字符串转换成数值。
Number() 函数的转换规则

①如果是Boolean类型,true和false将分别转换为 1 和 0
②如果是数字值,只是简单的传入和返回
③如果是null值,返回 0
④如果是undefined, 返回 NaN
⑤如果是对象,则调用对象的valueOf()方法。然后依照 其他规则转换返回的值。如果转换的结果是NaN,则调用对象的toString()方法。然后在依照其他规则返回字符串值。
⑥如果是字符串,则有一下规则

a. 如果字符串只包含数值,则转换为十进制数值
b. 如果字符串包含有效的浮点格式,则转换为对应的浮点数值。
c. 如果字符串包含有效的 十六进制格式,转换为相同大小的十进制整数
d. 如果字符串是空的,则返回 0
e. 如果字符串包含除上述格式之外的字符,转换为 NaN

由于Number()函数在转换字符串时比较复杂而且不够合理,因此在处理整数的时候更常用的是parseInt()函数。parseInt()函数在转换字符串时,会忽略字符串前边的空格,直到找到第一个非空字符。
① 如果第一个字符不是数值或者负号,返回 NaN,即空字符串会返回 NaN
② 如果第一个字符是数字字符,会继续解析第二个字符,直到解析完后续字符或者遇到一个非数字字符。
parseInt()函数提供了第二个参数,转换时使用的基数。

var num1 = parseInt('0xaf', 16)    //175
var num2 = parseInt('AF')    // NaN

parseFloat()值解析十进制值,故解析十六进制的字符串会转换为0。如果字符串包含的是一个可解析为整数的书,则会返回整数。

var float1 = parseFloat('1234blue')       //1234
var float2 = parseFloat('oxf')            // 0
var float3 = parseFloat('22.34.2')        //  22.34
var float4 = parseFloat('0980.98')        //  980.98 
6. String类型

String类型用于表示由0或多个16位Unicode字符组成的字符序列,可以由双引号或者单引号表示,以双引号开头的字符串必须以双引号结尾,以单引号开头的也必须以单引号结尾

  1. 字符字面量
    String数据类型包含一些特殊的字符字面量,即转义序列,用于表示非打印字符。
    \n----------------------换行
    \t-----------------------制表
    \b----------------------退格
    \r-----------------------回车
    \f-----------------------进纸
    \------------------------斜杠
    '------------------------单引号
    "------------------------双引号
    \xnn-------------------十六进制数
    \unnnn----------------Unicode字符
    这些字符字面量都可以出现在字符串的任意位置,被座位一个字符来解析
  2. 字符串特点
    字符串是不可变的,也就是说,字符串一旦被创建,它们的值就不能改变,要改变某个变量保存的字符串,首先要销毁原来的字符串,然后再用另一个包含新值的字符串填充该变量,
  3. 转换为字符串
    要把一个值转换为一个字符串,有两种方式,
    ① toString() 方法,返回相应值的字符创表现
var age = 11;
age.toString();      //   "11"
var found = true;
found.toString();    //  "true"

数值,布尔值,对象和字符串值都有toString() 方法,但 null 和 undefined 值没有这个方法
在调用数值的toString() 方法时, 可以传递一个参数,输出数值的基数,默认情况下是以十进制格式返回数值的字符串表现。
② String()转型函数
在不知道要转换的值是不是null或者undefined的情况下,可以使用转型函数 String(), 这个函数能够将任意类型的值转换为字符串
String()函数遵循的转换规则:

  1. 如果值有 toString() 方法,则调用该方法并返回结果
  2. 如果值是 null 则返回 " null"
  3. 如果值是 undefined, 则返回 "undefined"

如果要把某个值转换为字符串,可以使用加号操作符,把它与另外一个字符串""加在一起

7. Object类型

Javascript的对象就是一组数据和功能的集合,对象可以通过执行new操作符后跟要创建的对象类型的名称创建。

var o = new Object()

如果不给构造函数传递参数,就可以省略后面的那一对圆括号。
在javascript中,Object类型是所有它的实例的基础。
Object类型的每个实例都具有下面的属性和方法

constructor: 保存用于创建当前对象的函数
hasOwnProperty(‘name’):用于检查给定的属性在当前对象实例中是否存在。
isPrototypeof(object): 检查传入的对象是否是当前对象的原型
propertyIsEnumerable(propertyname): 检查给定的属性是否能够使用for-in语句来枚举
toLacaleString() : 返回对象的字符串表示
toString(): 返回对象的字符串表示
valueOf(): 返回对象的字符串,数值或者布尔值表示。

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

推荐阅读更多精彩内容