JavaScript (JS)基础:ECMAScript 浅析 (含Math基本方法解析)

浏览器端JavaScript的组成

ECMAScript:语法规范

DOMDocument Object Model  文档对象模型,操作页面元素

BOMBrowser Object Model  浏览器对象模型,操作浏览器功能

基本输出语句

console.log(“在控制台打印输出”)

document.write(“在文档中书写”)

alert(“弹窗输出”),省略了window调用对象,等同于window.alert

fn(),函数调用也有归属,省略了window调用对象,等同于window.fn()

变量的声明

不能使用数字下划线开始,不能是关键字保留字如:var class = XXX是不合理的,class是保留字

数据类型

基本数据类型:numberstringbooleanundefinednull

引用数据类型: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类型

字符串:(转义字符如: 表示字符串换行等)

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”)

}}

原文地址:https://www.cnblogs.com/Tabb/p/6431606.html