欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

javascript基础--变量

程序员文章站 2022-03-02 12:05:48
...

变量

最小全局变量

每个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();

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

定义变量
ECMAScript变量是松散类型的,可以保存任何类型的数据。

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, String

  • 复杂数据类型
    Object

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

    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" 变量的值是函数

数据类型转换

隐式类型转换
javascript基础--变量
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)较慢