javascript基础--变量

变量

最小全局变量

每一个JavaScript环境有一个全局对象,浏览器中就是window对象,Node环境中是global对象,在函数外面,this指向window对象,无论是经过var 声明或者直接建立的变量,都是这个全局对象的属性。在函数内部经过var声明的变量只会成为一个函数内部局部变量,直接建立的对象仍是会成为全局对象的属性。浏览器

this指向调用改函数的对象
var  myglobal = "hello"; // 不推荐写法
console.log(this);  // window
console.log(myglobal);  // "hello"
console.log(window.myglobal);  // "hello"
console.log(window["myglobal"]);  // "hello"
console.log(this.myglobal);  // "hello"
(function (){
var mylocal= 'world';
           myglobal1 = "!!";
console.log(this);   //window
console.log(mylocal);    //"world"
console.log(window.mylocal);  //undefined
           console.log(this.indow.mylocal);  //undefined
console.log(window.myglobal1);   //"!!"
console.log(myglobal1);   //"!!"
}());

须要注意的地方
建立隐式全局变量 var a = b = 0; 赋值运算从右到左,在此状况下比如var a = (b = 0),b是未声明的。函数

var的反作用
经过var 声明的变量不能delete。
JavaScript中,你能够在函数的任何位置声明多个var语句,而且它们就好像是在函数顶部声明同样(变量提高)发挥做用。须要注意的是ES6中经过let和const声明的变量是不存在变量提高状况的。测试

// 例子
myname = "global"; // 全局变量
function func() {
  alert(myname); // "undefined"
  var myname = "local";
  alert(myname); // "local"
}
func();
myname = "global"; // global variable
function func() {
 var myname; // 等同于 -> var myname = undefined;
 alert(myname); // "undefined"
 myname = "local";
 alert(myname); // "local"}
func();

代码处理分两个阶段,第一阶段是变量,函数声明,以及正常格式的参数建立,这是一个解析和进入上下文的阶段。第二个阶段是代码执行,函数表达式和不合格的标识符(为声明的变量)被建立。变量,函数的声明永远在代码处理的第一步,与代码编写位置无关。this

定义变量
ECMAScript变量是松散类型的,能够保存任何类型的数据。spa

var message = "hello" ;
   message = 100;    //有效,不推荐

经过var定义局部变量;忽略var会定义全局变量,做为window的属性;
使用未定义的变量,会报错,xxx is not defined,对于未定义的变量,只能使用typeof操做符,返回"undefined"。指针

var message;
等同于
var message = undefined;
非
var message = 'undefined';

数据类型

  • 5种简单数据类型
    Undefined, Null, Boolean, Number, Stringcode

  • 复杂数据类型
    Object对象

  • Null 类型
    null值表示一个空对象指针,若是定义的变量准备在未来用于保存对象,那么最好将该变量初始化为null而不是其余值。这样只要检查变量的值是否为null,就能够判断变量是否判断一个对象的引用。blog

    console.log( null == undefined);   // true
    console.log( null === undefined);  // false
    obj !=null 能够判断对象是否为null 或者 为undefined
    var obj;
    console.log(obj != null)             //false
    console.log(obj != undefined)        //false

    使用typeof操做符返回字符串图片

    "undefined" 变量未定义或者声明定义后未赋值。除了typeof操做符,操做未定义的变量会报错
    "boolean" 变量的值是布尔值
    "string" 变量的值是字符串
    "number" 变量的值是数值
    "object" 变量的值是对象或null
    "function" 变量的值是函数

数据类型转换

隐式类型转换
图片描述
Number 类型
若是小数点后面没有跟任何数字,或者浮点数值自己就是一个整数,那么该浮点数会被转换为整数。保存浮点数所需的内存空间是整数的两倍,若是可能,ECMAScript会不失时机地将浮点数转化为整数。

var floatNum1 = 1.;   // 解析为1
var floatNum2 = 10.0;  // 解析为10

基于IEEE754数值的浮点计算会产生舍入偏差,不要测试某个特定的浮点数值。
console.log(0.1 + 0.2 == 0.3); // false

非数值转换为数值

  • Number();

  • parseInt(); 指定基数

  • parseFloat(); 只解析十进制值,没有第二个参数指定基数

  • +;

    console.log(+'5');     //5
       console.log(+'5.5');  //5.5
       console.log(+'5w');  //NaN
       console.log(+'ww');  //NaN
       console.log(parseInt('5',10));  // 5
       console.log(parseInt('5.5',10));  //5
       console.log(parseInt('5w',10));  //5
       console.log(parseInt('ww',10));  //NaN
       var month = "06",
         year = "09";
       console.log(parseInt(month));    //6
       console.log(parseInt(month, 10));  //6
       console.log(parseInt(year));   //0
       console.log(parseInt(year, 10));  //9

    parseInt()能够从字符串中获取数值。当字符串以”0″开头的时候就有可能会出问题,开头为”0″的字符串会被当作8进制处理。为了不矛盾和意外的结果,老是指定基数(radix)参数---第二个参数。

    +"08" // 结果是 8
    +"08netease"  //NaN
    Number("08") // 8
    Number("08netease") //NaN
    parseInt("08netease", 10) //8   parseInt(arg0, arg1)较慢
相关文章
相关标签/搜索