javascript数据类型和函数总结

javascript中的数据类型

数据类型分为:基本数据类型 对象

1.基本数据类型

基本数据类型有5种,数字,字符串,布尔值,undefined,null

1.1 数字类型:number
>var n = 1;
>typeof n;
"number"

1.1.1 Infinity
在javascript中有一种叫infinity的特殊值,他所代表的是超出了javascript处理范围的值,但是Infinity依然是一个数字。


>Infinity
Infinity
>typeof Infinity
"number"
>1e309
Infinity
>1e308
1e308
>var a = 6 / 0;
>a
>Infinity

注意:
1.任何数除以0都是Infinity
2.Infinity于其他任何操作数执行任何算数运算的结果也都等于Infinity

1.1.2 NaN
如果在算数运算中使用了不恰当的操作数,导致运算失败,该运算就会返回NaN

typeof NaN
"number"
1.2 字符串:string

一对双引号或单引号之间的任何值都会被视为一个字符串。
一个字符串类型如果和算数运算符在一起使用的话字符串会转换成number

var s = 100;
s = s * 1 ;
typeof s ;
"number"
1.3 布尔值:boolean : true false

逻辑运算符:&& || !
falsy值:空字符串,null,undefined,数字0,数字NaN,布尔值false
其他情况都是truthy值。

1.4 undefined

当我们尝试使用一个不存在的变量时,打log的时候就会出现undefined。

1.5 null

javascript中的函数

预定义函数

javasctipt引擎中有一组可供随时调用的内建函数

  1. parseInt()
  2. parseFloat()
  3. isNaN()
  4. isFinite()
  5. encodeURI()
  6. decodeURI()
  7. encodeURIComponent()
  8. decodeURIComponent()
  9. eval()
parseInt('abc123');
NaN
parseInt('123abc');
123
parseFloat('1e10');
10000000000
parseInt('1e10');
1

注意:parseFloat比parseInt更强大的就是它可以操作指数

变量的作用域

全局变量:定义在函数以为的变量
局部变量:某个函数中定义的变量
注意:如果声明一个变量的时候没有使用var语句,该变量就会被默认认为是全局变量

变量提升

var a  = 123 ;
function f(){
alert(a);
var a = 1;
alert(a);
}
==>等价
var a  = 123 ;
function f(){
var a ; // 在函数内部的a变量提升了。
alert(a); // undefined
a = 1;
alert(a); // 1
}

匿名函数

没有名字的函数,可以作为参数传递给其他函数,使用匿名函数完成一次性工作。

function(){
    return 1 ; 
}
function(){
    return 2;
}

回调函数

function作为参数传递给另一个函数

// 例子1 
$("#btn_1").click(function() {
  alert("Btn 1 Clicked");
});
// 例子2
var friends = ["Mike", "Stacy", "Andy", "Rick"];
friends.forEach(function (eachName, index){
console.log(index + 1 + ". " + eachName); // 1. Mike, 2. Stacy, 3. Andy, 4. Rick

即时函数

这种函数可以在定义后立即使用。我们只需要将匿名函数的定义放进一对括号中,然后外面在紧跟一对括号即可,其中第二对括号起到的是“立即调用”的作用,同时它也是我们向匿名函数传递参数的方法。

(
    fucntion(){
        alert("foo");
    }
)();
==> 等价于 
(
    function(){
        alert("foo");
    }()
)
优先第一种方法。

内部(私有)函数

在一个函数内部在定义一个函数

function outer = function(param){
    var inner = function(theinput){
        return theinput * 2 ;
    };
    return 'the result is' + inner(param);
}

outer(2)
the result is 4 ;

闭包

作用域链

javascript中不存在大括号级的作用域,但它有函数作用域,也就是说,在某函数内定义的所有变量在该函数外是不可见的,但是如果该变量是在某代码块中被定义的(如在if或for语句中),那么它在代码块外是可见的。

var a = 1;
function f(){
    var b = 1;
    return a ;
}
f();
1 
b
ReferenceError:b is not defined

在这里,变量a是属于全局域的,而变量b的作用域就在函数f()内了,所以,
在f()内,a和b都是可见的
在f()外,a是可见的,b则不可见
下面看一个例子,如果我们在函数outer()中定义了另一个函数inner(),那么在inner()中可以访问的变量既来自它自身的作用域,也可以来自其“父级”作用域,这就形成了一条作用域链(scope chain),该链的长度则取决我们的需要。

var gloabl = 1;
function outer(){
    var outer_local = 2;
    function inner(){
        var inner_local = 3;
        return inner_local + outer_local + gloabal;
    }
    return inner();
}
outer()
6
利用闭包突破作用域链
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值