1

下一篇:js入门笔记整理(二)——操作符


给入门的同学整理的笔记,不对的地方欢迎指出~

javascript的组成

首先需要明白的是,一个完整的javascript实现应该由下列三个不同的部分组成

  • 核心(ECMAScript,ECMAScript是一种语言的标准)
  • 文档对象模型(DOM)
  • 浏览器对象模型 (BOM)

语法

  • 区分大小写
  • 标识符
  • 注释
  • 严格模式
  • 语句

区分大小写
ECMAScript中的一切都区分大小写。如test和Test分别代表不同的变量

标识符
所谓标识符,就是指变量、函数、属性的名字,或者函数的参数。命名规则如下:

  • 第一个字符必须是一个字母、下划线(_)或一个美元符号($)。注意数字不能当首字母
  • 其它字符可以是字母、下划线、美元符($)或者数字。
    按照惯例,ECMAScript使用驼峰大小写格式,也就是第一个字母小写,剩下每个单词的首字母大写。如:doSomething、myBook

注释

  • 单行注释以两个斜杠开头
 //单行注释 

  • 块级注释以一个斜杠和一个星号(/)开头,以一个星号和一个斜杠(/结尾)
/*
*这是一个多行
*块级注释
*/

严格模式
首先要理解,在严格模式下,ECMAScript3标准中的一些不确定行为将得到处理,而且对某些不安全的操作也会抛出错误。

  • 要在整个脚本中使用严格模式,可以在顶部添加
'use strict'

这是一条编译指令,用于告诉支持的javascript引擎切换到严格模式

  • 在指定函数内部使用严格模式
function fun () {
    'ustrict';
    //函数体

支持严格模式的浏览器包括:IE10+、Firfox 4+、 Safari5.1+、Opera和Chrome

语句
ECMAScript中的语句以一个分号(;)结尾;如果省略分号,则由解析器确定语句的结尾。

var count = a + b   //即使没有分号也是有效的。——不推荐
var count = a + b;  //有效的语句——推荐。因为加上分号可以避免很多错误,甚至提高性能

关键字和保留字
需要特别注意的就是关键字和保留字不能当作标识符使用,即变量、函数等的命名不能和关键字保留字一样。
如: var for;这是错误的,因为for是ECMAScript 5的关键字。

具体的关键字和保留字可以自行查阅相关书籍

变量

定义变量要使用var操作符(注意var是一个关键字),后跟一个变量名(即标识符)。如:

 var str;

ESCMScript也支持直接初始化,即定义变量的同时就直赋值如:

 var str = 'hello word';

ECSMScript的变量是松散类型的,所谓松散类型就是可以保存任何值。因此,在修改变量的值的同时,也可以修改类型。如:

 var str = 'hello word';
 str = 100;   //有效,但不推荐

这个列子中,str先是值为'hello word'的字符串,再是值为100的整型。

*还有一点值得注意的是,使用var定义的变量将成为其所在作用域内的局部变量。如:

function fun () {
    var str = 100; //局部作用域
}
fun();
console.log(str); //错误

*省略var会创建一个全局变量。如:

function fun () {
    str = 100;  //全局变量
}
fun();
console.log(str);  // 100

我们并不推荐省略var,因为这可能会导致不必要的混乱,使维护困难。在严格模式下,给未声明的变量赋值会抛出错误。

用一条语句定义变量,使用逗号隔开,ru:

var str = 'hi',
    msg = false,
    val = 100;

数据类型

ESCMScript有6中数据类型:(首字母大写)

Undefined
Null
Number
Boolean
String
Object

typeof操作符(全部小写)

"undefined" —— 未定义
"boolean"  ——  布尔值
"string" —— 字符串
"number" —— 数值
"object" —— 对象或null
"function" —— 函数

注意:从技术角度讲函数确实不是一种数据类型,它属于object类型,但可以通过typeof区分函数和其它对象,

undefined类型
即:使用var定义但没有初始化(也就是没有赋值)的变量。

初学者要区分与未定义的变量的区别:

var str;
//下面变量未定义
//var msg;

consoel.log(str); //'undefined'
console.log(msg); //报错

//变量未定义只能执行typeof操作
typeof(str); // 'undefined'
typeof(msg); // 'undefined'

null类型
从逻辑角度来看,null表示一个空对象指针。

typeof(null); //'object'

其实,undefined的值是派生自null,因此,它们的相得性质总是返回 true。如:

console.log(undefined == null); //true

但是注意他们不恒等

console.log(undefined === null); //false

boolean类型
该类型只有两个值:true和false

各数据类型和boolean的转换:
clipboard.png
这些转换规则对理解流控制控制语句(如if语句)自动执行Boolean转换非常重要。如:

var msg = 'not null';
if (msg) {
    console.log('msg转换值是true');
}

Number类型

ESCMScript中使用Number类型表示整数和浮点数。

十进制:最基本的字面量格式
八进制:第一位必须是0。如:

070  //八进制的56

十六进制:前两位必须是0x。如:

oxA  //十六进制的10

NaN
NaN,是一个特殊的数值,表示一个本要返回数值的操作数未返回数值的情况(这样就不会抛出错误)。如:

function fn1 () {
    return 10; //有数值返回
}
var val1 = fn1();
console.log(val1); //10 


function fn2 () {
    return 10; //没有数值返回
}
var val2 = fn2();
console.log(val2); //NaN    
  • 任何涉及到nan的操作都返回NaN。如:

    Nan / 10 = NaN;
  • NaN与任何值都不相等,包括NaN本身。如:

    console.log(NaN == NaN);  //false
    console.log(NaN === NaN);  //false
  • 在ESCMScript中,任何数值除以0,都返回NaN。

    如: 300 / 0 = NaN;
    

数值转换

NUmber()函数:——可用于任何类型
(1)如果是Booleam值,true和false值分别被转换成1和0
(2)如果是数值,只是简单传入和返回
(3)如果是null,返回0
(4)如果是undefined,返回NaN
(5)如果是字符串
a.空字符串返回0
b.如果只包含数字(包括正负号),转换为十进制数值。如:

 '123'转换为123
 '012'转换为12(前导的0忽略)

c.如果包含有效的浮点格式,转换为相应的浮点数值(同样忽略前导的0)
d.如果包含有效的十六进制,如'0xA',转换为相应的十进制
e.否则转换为NaN
(6)如果是对象,则调用对象的valueof方法,按上述规则转换。如果返回的值为NaN,在调用对象的tostring方法,按照上述规则转换

由于Numbera()函数在转换字符串时比较复杂切不够合理,因此在处理整数的时候更常用的是parseInt()函数。

parseInt()函数—— 将数值转换为整数

(1)如果第一个字符(空格除外)不是数字或负号,返回NaN
(2)如果第一个字符(空格除外)是数字或负号,函数将解析第二个字符,直至解析完后续字符或者遇到了一个非数字字符。如:

var num1 = parseInt('123ad');  //123
var num2 = parseInt(''); //NaN
var num3 = parseInt('0xA'); //10(十六进制)
var num4 =  parseInt(13.3);  //13
var num5 = parseInt('070');  //56(八进制)
var num6 = parseInt('20'); //20(十进制)

由于parseInt()函数在处理八进制时ESCMScript3与ESCMScript5存在分歧,ESCMScript5会忽略数字前面的值。所以为了避免不必要的错误,建议总是为函数提供第二个基数(即指定多少进制)。如:

parseInt('020', 10);   //十进制
parseInt('010', 8);   //八进制
parseInt('7', 10);    //十进制
parseInt('7', 2);     //二进制

parseFloat()函数——将数值转换为浮点数值
(1)之解析十进制
(2)始终忽略前面的0
(3)只有第一个小数点有效

var num1 = parseFloat('123ad');  //123
var num2 = parseFloat(''); //NaN
var num3 = parseFloat('0xA'); //0
var num4 = parseFloat(13.3);  //13.3
var num5 = parseInt('070');  //70
var num6 = parseInt('20.23e3'); //20.23000

String类型
字符串可以使用双引号("")或单引号('')表示

类型转换

  • toString()方法

(1)数值、布尔值、对象和字符串值都有toString()方法
(2)null、undefined没有toString()方法
(3)方法的第二个参数可以传入基数

var num = 10;
num.toString(num); //'10'
num.toString(num, 2); //'1010'
num.toString(num, 8); //'12'
num.toString(num, 10); //'10'
num.toString(num, 16); //'a'
  • String()函数

(1) 如果值有toString()方法则调用toString()方法
(2) 如果值是null,则返回'null'
(3) 如果值是undefined,则返回'undefined'

Object类型
Object类型有下列属性和方法:

  • constructor:对象的构造函数
  • hansOwnProperty(propertyName):检查给定属性在当前对象(不是实例原型)中是否存在
  • isPropertypeOf(object):检查传入的对象是否是对象的原型
  • propertyIsEnumerable(propertyName):检查给定属性是否能用for-in枚举
  • toLocaleSting():返回对象的字符串
  • toSting():转换成字符串
  • 返回对象的字符串、数值、布尔值。通常与toString()方法的返回值相同

下一篇:js入门笔记整理(二)——操作符


关注作者吧~

clipboard.png


大米aBigRice
236 声望24 粉丝

欢迎我呀~