代码改变世界

JavaScript基本概念(1)

2016-09-29 11:04  sunhengkai941022  阅读(236)  评论(0)    收藏  举报

一.语法

  弱类型语法:ECMScript中严格区分大小写(变量、函数名、操作符)。

  标识符:就是指变量、函数、属性的名字,或者函数的参数,标识符第一个字符必须是一个字母、下划线_或者美元符号,其他字符可以使字母、下划线、美元符号或者数字。标识符中也可以包含扩展的ASCII或者Unicode字母字符,但不推荐。标识符采用驼峰大小写格式。

  注释:ECMAScript采用c风格的注释,包括单行注释和块级注释,单行注释://  ,块级注释:/*---*/

  严格模式:ECMAScript5中引入了严格模式(strict mode )的概念,要在整个脚本中启用严格模式在顶部添加代码

"use strict";

这行代码看起来像是字符串,而且没有赋值给任何变量,但是其实他是一个编译指示(pragma),用于告诉支持的JavaScript引擎来切换到严格模式,指定函数在严格模式下执行可用

function (){
"use strict";
//函数主体
}

  语句:虽然语句结尾的分号不是必需的,但是加上这个分号可以避免很多错误,在控制语句中使用代码块来让编码意图更加清晰。

  关键字和保留字:http://www.itxueyuan.org/view/6627.html

  变量:ECMAScript的变量类型是松散型的,就是可以保存任何类型的数据,每个变量仅仅是一个用于保存值的占位符而已

var message;//定义变量
var message="hi";//可以直接赋值
function test(){
var message="hi";//局部变量
}
function test(){
message="hi";//全局变量,不推荐!!
}
function test(){
var message1="hi",
    message2="hi world";//加逗号可以一次定义多个变量      
}

  数据类型:包括五种简单数据类型(也称为基本数据类型)undefined、null、boolean、number、string,和一种复杂数据类型object,不支持任何创建自定义类型的机制。

  1.typeof操作符

    undefined---未定义

    boolean---布尔值

    string---字符串

    number---数值

    object---对象或者null

    function---函数

  主意typeof是操作符不是函数,后面的圆括号可加可不加,有些时候typeof操作符会返回一些令人疑惑却正确的值,如调用typeof null可返回object,null为一个空对象,Safari5及之前版本,chrome7及之前版本对正则表达式调用时会返回function,而其他浏览器在这种情况下会返回object。

  函数在ECMAScript中时对象,不是一种数据类型,但是也确实有一些特殊属性,因此通过typeof来区分函数和对象是有必要的。

  2.undefined类型

    在使用var声明变量时没有对其加以初始化时,这个变量的值就为undefined,当在程序中使用未初始化的变量时,会出现undefined,使用没有声明的变量,会出现错误,但是使用typeof操作符来执行两种变量,都返回undefined值,这两种变量从技术上有本质的区别,但是在实际中对哪个变量都不能执行真正的操作。养成一个良好的习惯,应每一个变量都给出初始化值。

  3.null类型

    表示一个空对象指针,如果定义的变量准备在将来用于保存对象,那么就应该先把它初始化为null。

    undefined派生与null,当undefined==null时会返回true,但是它们两个用途完全不同。

  4.boolean类型

数据类型  转换为true的值 转换为false的值
boolean true false
string 任何非空字符串 ”“(空字符串)
number 任何非零数字值 0和NaN
object 任何对象 null
undefined n/a(not applicable)意思时不适用 undefined

  5.number类型

    最基本的数值字面量时十进制整数。

    八进制:第一位必须是0,然后位八进制数字序列(0-7),若数值超出了范围,那么前导数字被忽略后面数值被当作十进制解析,八进制在严格模式下时无效的,会导致js引擎抛出错误。

    十六进制:前两位必须时0x,后面跟任何十六进制数字(0-9,a-f),字母可大写也可小写,+0和-0被认为相等。

      浮点数值:浮点数值的计算会产生舍入误差,当极大或极小的数值时用e来表示,由于浮点数值所占的内存空间是整数的两倍,所以ECMAScript会不失时机的把浮点数转换为整数。

      数值范围:ECMAScript中并不能保存世界上所有的数值,能够表示的最小数值保存在Number.MIN_VALUIE中,在大多数浏览器下,此值是5e-324,最大值保存在Number.NAX_VALUE中,1.7976931e+308,若某次结果计算超出了js数值范围的值,则会被转换成Infinity(无穷大)-Infinity。要想确定一个数值是不是有穷的,可以使用isFinite()函数,参数为数值,返回值为boolean值。

      NaN:not a number 用来表示一个本来要返回数值的操作数未返回数值的情况(这样就不会抛出错误了),NaN与任何值都不想等,包括他自身。用isNaN()函数来确定参数是不是非数值。当使用时,会尝试把数值转换为数值,如true、“10”。也适用于对象,会先调用对象的valueOf()方法,然后确定该方法返回的值是否可以转换为数值,若不能,再基于这个返回值再调用toString()方法,再测试返回值。

      数值转换:三个函数,Number()、parseInt()、parseFloat()

    Number()函数:若是Boolean值,true和false分别返回1和0;若是数字值,只是简单的传入和传出;若是null则返回NaN;若是字符串则遵循下列规则,字符串中若只包含数字,则将其转换成十进制数值,若字符串中包含有效的浮点格式,则转换成对应的浮点数值,若包含有效的十六进制格式,则转换为十进制整数值,若为空,则为0,若包含除了上述之外的字符,则将其转换为NaN;若是对象,则调用对象的valueOf()方法,然后依照前面规则转换,若结果是NaN,则调用对象的toString()方法,然后再依次按照前面的规则返回字符串。

    Number()函数转换时复杂且不够合理,所以更常用的是parseInt()和parseFloat()函数。

    parseInt()函数:看是否符合数值模式,她会忽略字符串前面的空格,直到找到第一个非空格字符,如果第一个字符不是数字字符或者负号,会返回NaN,对空字符返回0;若第一个字符是数字字符,可以识别出各种整数格式,但是在解析八进制字面量的字符串时,ECMAScript3和ECMAScript5有分歧,3会认为是八进制的来转换为十进制,5会认为是十进制的把前导0忽略;为了消除这个困惑可以为函数提供第二个参数,转化时用的基数(即多少进制)。建议为了避免错误,在任何情况下都要明确指定基数。

    parseFloat()函数:始终会忽略前导0,并且只解析十进制,后面没有第二个参数。

  6.String类型

  字符字面量:

字面量 含义
\n 换行
\t 制表
\b 退格
\r 回车
\f 进纸
\\ 斜杠
\' 单引号
\" 双引号
\xnn 以十六进制代码nn表示的一个字符
\unnnn 一十六进制代码nnnn表示的一个Unicode字符

  字符串的lenght属性包括转义字符的长度,若字符串中包含双字节字符,那么lenght属性可能不会精确的返回字符串中的字符数目。

  字符串的特点:字符串一旦被创建,他的值就不能改变,要改变某个变量的字符串,首先要销毁原来的字符串然后用再用另一个包含新值的字符串填充该变量。

  转换为字符串:两种方法:每个值都有的toString()方法,返回相应值的字符串表现,但是null和undefined没有这个方法,大多数情况下不用传递参数,但是再调用数值的toString()方法时可以传递一个参数,输出数值的基数。第二种方法String()方法,再不知道要转换的值是不是null或undefined的情况下,用String()函数,当值有toString()方法时,调用此方法,若值时null和undefined则返回“null”和“undefined”。

  小方法:若把某个值转换为字符串,可以使用加号操作符把他与一个字符串“”加在一起。

   7.Object类型

  ECMAScript中的对象其实就是一组数据和功能的集合,可使用new操作符后跟要创建的对象类型的名称来创建。

var o=new   Object();//标准
var o=new Object;//可以省略圆括号,但是不推荐

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

    constructor:保存着用于创建当前对象的函数。

    hasOwnProperty(propertyName):用于检查给定的属性在当前对象实例中是否存在,而不是在实例的原型中,座位参数的属性名(propertyName)必须以字符串的形式指定。

    isPrototypeOf(object):用于检查传入的对象是否是当前对象的原型。

    propertyIsEnumerable(propertyName):用于检查给定的属性是否能够使用for-in语句来枚举。属性为字符串形式。

    toLocaleString():返回对象的字符串表示,该字符串与执行环境的地区对应。

    toString():返回对象的字符串表示。

    valueOf():返回对象的字符串,数值或者布尔值表示。