1基础
JavaScript存在6种数据类型
number,string,undefined,boolean,null,object
强制转换方法
Number()
Boolean()
String()
type of 操作符用来检测数据类型(只能用来精确的检测基本数据类型)
console.log(typeof 1); //number console.log(typeof false);//boolean console.log(typeof undefined);//undefined console.log(typeof 'string');//string console.log(typeof Function);//function console.log(typeof null);//object console.log(typeof {a:1});//objectView Code
instanceof 操作符用来检测引用类型的类型()
例如 A instanceof B ; 检测A是否是B的实例
var arr=[1,2,3] var obj={a:1} var fun=()=>{} console.log(arr instanceof Array);//true console.log(obj instanceof Array);//false console.log(fun instanceof Array);//false console.log(arr instanceof Function);//false console.log(obj instanceof Function);//false console.log(fun instanceof Function);//true //JS中 所有的引用类型都是Object的实例(万物皆对象) console.log(arr instanceof Object);//true console.log(fun instanceof Object);//true console.log(obj instanceof Object);//trueView Code
Number
- 分为 number和NaN
- 精度又分为整型和浮点型(进度最高是17位小数点)
- 整型方法 parseInt()
- 浮点型方法 parseFloat()
- toFixed(num) 返回数值的字符串会保留num个小数位表示
- toString(num) 将数字转换成几进制
- toLocalString() 返回数值的字符串会保留三位小数
- valueOf() 返回原来的数值
-
var num=10.23848;
console.log(num.toLocaleString());//返回对象表示的基本类型的数值保留三位小数(四舍五入)
console.log(num.toFixed(2));//10.24 保留几位小数会四舍五入
console.log(num.toString(8));//重写了toString(num)方法 将数字转换成几进制
console.log(num.valueOf());//返回对象表示的基本类型的数值
3.number能取得的最大值和最小值
- Number.MAX_VALUE
- Number.MIN_VALUE
isNaN()判断一个类型的值是不是NaN
console.log(isNaN(10)) console.log(isNaN('10')) console.log(isNaN(true)) console.log('-------------') console.log(isNaN('10a')) console.log(isNaN('blue')) console.log(isNaN(NaN)) console.log(isNaN('a10'))View Code
各类型转换成Boolean为false的情况
//数字转换成Boolean为false的情况 console.log(Boolean(0)) console.log(Boolean(NaN)) //字符串转换成Boolean为false的情况 console.log(Boolean('')) //null转成Boolean为false console.log(Boolean(null)) //undefined转成Boolean为false console.log(Boolean(undefined))View Code
Object类型(object的每个实例都具有下列属性和方法)
var obj=new Object();
constructor :保存着用于创建当前的函数的对象;构造函数(constructor)就是Object();
hasOwnProperty(propertyName) :判断给定的属性在当前对象实例中是否存在(不是原型种)[propertypName必须用字符串形式包裹起来]
例如: obj.hasOwnProperty('name');
isPrototypeOf(object) 用来判断传入的对象是否是传入对象的原型
propertyIsEnumerable(propertyName):用于检测给定的属性是否能够使用for-in语句进行枚举[propertypName必须用字符串形式包裹起来]
toLocaleString():返回对象的字符串表示.该字符串与执行环境的地区对应
toString():返回对象的字符串表示
valueOf():返回对象的字符串,数值或布尔值表示,通常与toString()的返回值相同
执行环境和作用域
执行环境:定义了变量或函数有权访问其他数据,决定了它们各自的行为;
全局作用域:当代码在一个环境中执行时,会创建变量对象的一个作用域链(保证对执行环境有权访问的所有变量和函数的有序访问)
局部作用域:局部作用域中的变量可以在局部环境与全局变量互换使用
内部环境可以通过作用域链访问所有的外部环境,但外部环境不能访问内部环境中的任何变量和函数.
延长作用域链的方法两种(这么说是因为有些语句可以在作用域链前端临时增加一个变量对象,该变量对象会在代码执行中被移除)
- try-catch语句中的catch块
- with语句
function buildUrl(){ var qs="?debug=true"; with(location){ var url=href+qs; } return url; } console.log(buildUrl())View Code
函数的内部属性
arguments 和this
和callee 和caller(严格模式下不能使用 也不能为caller赋值 否则会导致错误)
this 代表的是执行环境
arguments是个类数组对象 主要用途是保存函数的参数,
这个对象还有一个名叫callee的属性(指向拥有arguments对象的函数)
function inner(n){ if(n<=1){ return 1; } return n*arguments.callee(n-1) } // 重写后的inner()函数体内没有在引用函数名inner ,这样无论引用函数时使用的是什么名字,都可以保证完成递归调用 var outer=inner; inner=function(){ return 0; } console.log(outer(5))//120 console.log(inner(5))//0View Code
这个对象还有一个名叫caller的属性(保存着调用当前函数的函数的引用,如果在全局作用域中调用当前函数,它的值为null)
function outer(){ inner() } function inner(){ // console.log(inner.caller) console.log(arguments.callee.caller) } console.log(inner());//null console.log(outer());//outerView Code
函数属性和方法
length 表示函数接受的命名参数的个数
prototype 是函数的原型函数(prototype属性是不可以枚举的,因此使用for-in无法发现)
每个函数都包含两个非继承来的方法(都是用来改变this的指向 只是接受的参数不同):apply(this,arr) 和call(this,1,3)
apply(this,arr) 接受数组,类数组
function sum(num1,num2){ return num1+num2 } function callSum1(num1,num2){ return sum.apply(this,arguments) } function callSum2(num1,num2){ return sum.apply(this,[num1,num2]) }View Code
call(this,1,2,3) 接受的参数必须逐个列举出来
function sum(num1,num2){ return num1+num2 } function callSum(num1,num2){ return sum.call(this,num1,num2) }View Code