下一篇: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的转换:
这些转换规则对理解流控制控制语句(如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入门笔记整理(二)——操作符
关注作者吧~
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。