版本三开始看一边

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});//object
View 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);//true
View Code

 

Number

  1. 分为 number和NaN 
  2. 精度又分为整型和浮点型(进度最高是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()的返回值相同

 

执行环境和作用域

执行环境:定义了变量或函数有权访问其他数据,决定了它们各自的行为;

全局作用域:当代码在一个环境中执行时,会创建变量对象的一个作用域链(保证对执行环境有权访问的所有变量和函数的有序访问)

局部作用域:局部作用域中的变量可以在局部环境与全局变量互换使用

内部环境可以通过作用域链访问所有的外部环境,但外部环境不能访问内部环境中的任何变量和函数.

 

延长作用域链的方法两种(这么说是因为有些语句可以在作用域链前端临时增加一个变量对象,该变量对象会在代码执行中被移除)

  1. try-catch语句中的catch块
  2. with语句
版本三开始看一边
function buildUrl(){
    var qs="?debug=true";

    with(location){
        var url=href+qs;
    }
    return url;
}
console.log(buildUrl())
View Code

 

函数的内部属性

argumentsthis

和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))//0
View Code

这个对象还有一个名叫caller的属性(保存着调用当前函数的函数的引用,如果在全局作用域中调用当前函数,它的值为null)

版本三开始看一边
    function outer(){
        inner()
    }

    function inner(){
        // console.log(inner.caller)
        console.log(arguments.callee.caller)
    }

    console.log(inner());//null
    console.log(outer());//outer
View 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

 

上一篇:JavaScript关于返回数据类型一个小小的笔记


下一篇:Java-instanceof和类型转换