浏览器端JavaScript的组成
ECMAScript:语法规范
DOM:Document Object Model 文档对象模型,操作页面元素
BOM:Browser Object Model 浏览器对象模型,操作浏览器功能
①基本输出语句
console.log(“在控制台打印输出”)
document.write(“在文档中书写”)
alert(“弹窗输出”),省略了window调用对象,等同于window.alert
fn(),函数调用也有归属,省略了window调用对象,等同于window.fn()
②变量的声明
不能使用数字和下划线开始,不能是关键字和保留字如:var class = XXX是不合理的,class是保留字
③数据类型
基本数据类型:number、string、boolean、undefined、null
引用数据类型:object 数据存储在堆中,变量存储在栈中,变量通过引用路径找到对应的数据。引用类型进行复制,赋值时复制的是栈到堆的引用路径
数据类型判断方法:
a) 使用typeof判断数据类型,额外添加了function类型,所有判断结果如下:
b) 使用instanceof判断数据实例:
a instanceof b 判断a是否是b的实例或者子类,如果是,就返回true,不是就返回false
var a = new Array();
function fn (a , b) { };
var b = new fn ( );
console.log(a instanceof Array); 返回true
console.log(a instanceof Object); 返回true,因为Array是Object的子类
console.log(b instanceof fn); 返回true,因为b是fn构造函数的实例对象
console.log(fn.arguments instanceof Array); 返回false,因为arguments是伪数组,不是一个真正意义上的数组
c) 使用Object.prototype.toString.call(value)判断数据类型:
(1)判断基本类型:
Object.prototype.toString.call(null); ------ [object Null]
Object.prototype.toString.call(undefined); ------ [object Undefined]
Object.prototype.toString.call(“abc”); ------ [object String]
Object.prototype.toString.call(123); ------ [object Number]
Object.prototype.toString.call(true); ------ [object Boolean]
(2)判断原生引用类型:
函数类型
function fn(){ }
Object.prototype.toString.call(fn); ------ [object Function]
日期类型
var date = new Date();
Object.prototype.toString.call(date); ------ [object Date]
数组类型
var arr = [1,2,3];
Object.prototype.toString.call(arr); ------ [object Array]
正则表达式
var reg = /a/g;
Object.prototype.toString.call(reg); ------ [object RegExp]
原生JSON对象:
Object.prototype.toString.call(JSON); ------ [object JSON]
注意:Object.prototype.toString()本身是允许被修改的,这里讨论的前提都是假设toString()方法未被修改
④数值类型
Js中计算机能表示的最大值:Number.MAX_VALUE === 1.7976931348623157e+308
Js中计算机能表示的最小值:Number.MIN_VALUE === 5e-324
由于浮点数的存在,小数在运算中有时会出现丢失精度的情况:
var a = 0.1;
var b = 0.2;
console.log(a + b); 输出结果为:0.30000000000000004
console.log(a + b === 0.3) 输出结果为:false
所以在使用小数进行数值判断时,要注意这样的情况出现
关于数值运算的基本方法:
parseInt("123.45abc") 返回123,舍弃小数与非数字部分,如果字符串不是数字开头,返回NaN
parseFloat("123.45abc") 返回123.45,舍弃非数字部分,如果字符串不是数字开头,返回NaN
Math对象的基本方法:
Math.ceil(1.4) 向上取整,有小数就整数部分加1,返回2
Math.round(1.5) 四舍五入,返回2,如果是负数-1.5,则为-1,-1.55为-2
Math.floor(1.4) 向下取整,返回1
Math.random() 返回 0 ~ 1 之间的随机数
Math.abs(x) 返回x的绝对值
Math.max(x,y) 返回 x 和 y 中的最大值
Math.min(x,y) 返回 x 和 y 中的最小值
Math.PI 表示无理数π的数值
Math.exp(x) 返回 e 的指数
Math.log(x) 返回数的自然对数(底为e)
Math.pow(x,y) 返回 x 的 y 次幂
Math.sin(x) 返回x的正弦
Math.cos(x) 返回x的余弦
Math.tan(x) 返回x的正切
Math.acos(x) 返回x的反余弦值
Math.asin(x) 返回x的反正弦值
Math.atan(x) 以介于 -PI/2 与 PI/2 弧度之间的数值来返回 x 的反正切值
Math.atan2(y,x) 返回从 x 轴到点 (x,y) 的角度(介于 -PI/2 与 PI/2 弧度之间)
Math.sqrt(x) 返回x的平方根
Math.toSource() 代表对象的源代码
Math.valueOf() 返回一个 Math 对象的原始值,不常用
⑤字符串类型、boolean类型
字符串:(转义字符如:\n表示字符串换行等)
Boolean类型:表示没有意义的值转换成boolean值都是false,例如:空字符串””
、数值0、NaN、null、和undefined;其他都是true,例如:”false”、”0”都是true
⑥数据类型转换
转换成字符串:toString()、String()、+ “”或者加一个空字符串
转换成数字:Number()只能转换”123456”纯数字字符串;parseInt()可以转换”123px”;parseFloat(),可以转换”123.123.123”;如果字符串中的内容是数字,那么只用在后面减0,就会转换成数值类型,例如:(”32”-0)为32,此处如果用+0则没有效果,只能-0
⑦运算符
(1)一元运算符(只有一个元素) :自加++、自减--、非!
(2)逻辑运算符 && 、|| 、!
短路操作(返回对当前表达式起决定作用的值):("”||”true”)返回:”true”
(3)运算符优先级,从高到底
( )括号优先级最高
> 一元运算符:++、 -- 、!
> 算数运算符:先* 、/后+、-
> 关系运算符:>、>=、<、<=
> 相等运算符:== 、!=、===、!==
> 逻辑运算符先&&,后||
⑧流程控制语句
(1)选择语句
a) if ( ) { } else if ( ) { } else { }语句
b) 三元运算符:a === 2 ? console.log(“等于”) : console.log(“不等于”);使用结果等同于if , else
c) switch case default语句 进行全等比较,只要全等就进入,没有break就一直执行,case里必须是具体的值,可以是返回值为boolean的表达式如:a > 3,但switch( true )中要传入boolean
var a = 4
switch (a) {
case 3:
console.log("a");
case 4: 这里满足条件,执行进入
console.log("b");
case 5: 代码执行结果: b , c
console.log("c");
break;
default :console.log("default")
}
(2)循环语句
a) for循环 for( var i=0 ; i < 20;i++ ) { break }
b) for in循环 for( var k in obj) { this[k]=obj[k]} 可以遍历对象的属性
c) while循环 while( i <= 10 ){ i++; }
d) do while循环 do { i++; } while( i <= 10 ) 先执行,再判断,所以至少执行一次
⑨数组Array
(1)数组的声明
构造函数声明:var arr = new Array( 1 , 2 , 3 ) 声明了一个数组为[ 1 , 2 , 3 ]
如果只传一个数值参数var arr = new Array( 3 ) 表示声明的数组的长度为3
字面量声明:var arr = [ 1 , 2 , 3 ]
(2)数组的索引:从0开始,[ ].length表示数组的长度
⑩对象Object
(1)对象的声明
构造函数声明:var obj = new Object( )
字面量声明:var obj = { name:”Tom” , age:20 , SayHello:function(){
Console.log(“hello”)
}}