初窥javaScrit权威指南,第三章类型、值和变量(2)

来源:互联网 发布:java写邮件qq邮箱 编辑:程序博客网 时间:2024/06/06 01:14

前言:只记叙自己不熟悉的知识点,仅供参考。如果写的有什么不妥的地方,望各位前辈指正,不胜感激。


全局对象:
JS可以直接使用,当JS解析器启动的时候,会创建一个新的全局对象,并定义一组初始属性:

1. 全局属性: 如undefined、infinity和NaN2. 全局函数:如isNaNparseInt() 和 eval()3. 构造函数:如Date()、RegExp()、String()、Object()、Array()4. 全局对象:如MathJSON这些初始属性不是保留字,但应该当做保留字来对待。var global =  this;// 定义一个引用全局对象的全局变量

包装对象:

JS对象是一种复合值,他的属性或者已命名值得集合。使用‘.’来引用属性,当属性是一个函数时,成为其的方法。当对一个字符串、数字或者布尔值左操作其属性的时候:会创建new出一个对象(被成为 包装对象),当操作完成后,该对象会销毁。

不可变的原始值和可变的对象引用:
值比较:不变,重新产生新的。(原始值)
引用类型:可变,原来的对象。(对象的值)

类型转换:
一些例子:

10 + "object" // "10object"字符串"7" * "4"  // 28 数字var n = 1 - "x" // NaN(字符串x无法转换为数字)n + " object"  // "NaN object"(NaN转化为字符串)

转换和相等性:

null == undefined // true"0" == 0 // 比较前字符串转换成数字 true0 == false // 比较前布尔值转换为数字 true"0" == false // 之前都转换为数字 true

显示类型转换:

Number("3") // 3String(fasle) // "false" / false.toString()Boolean([]) // trueObject(3) // new Number(3)x+ "" // String(x)+x  // Number(x) equals to x -0!!x // Boolean(x)注意:null undefined 不具有toString()方法

toString() 进制转换

var n = 17;binary_string = n.toString(2);octal_string = "0" + n.toString(8);hex_string = "0x" + n.toString(16)

数字转字符串

var n = 123456.789;//都会四舍五入//根据小数点后的指定位数 转 字符串n.toFixed(0);  //"123457"n.toFixed(2);  // "123456.79"n.toFixed(5);  // "123456.78900"//指数法记录n.toExponential(1);  // "1.2e+5"n.toExponential(3);  // "1.235e+5"//有效数字位,如果少于真数部分的位数用指数表示n.toPrecision(4); // "1.234e+5"n.toPrecision(7); // "123456.8"n.toPrecision(10); // "123456.789"

字符串 转 数字

parseIntparseFloat他们都会忽略前导空格,和数字后面的内容。 如果第一个非空字符是非法的返回NaNparseInt(" 123 meters") // 123parseFloat("0xFF") // 255parseInt("0.1") // 0parseInt(".1") // NaNelse parseInt 可接受第二个参数 表示转换的进制parseInt("34",2)

对象转化为原始值:

对象转字符串toString() // 没有这个方法 调用valueofvalueof()  // 还是没有 报错对象转数字  valueof()  // 没有这个方法 调用toStringtoString() // 还是没有 报错 其他var now = new Date(); //日期对象typeof(now +1)  // stringtypeof(now - 1) // numbernow == now.toString() // truenow > (now +1) // true 数字比较

变量声明:

var i;var num;var i, num;var i=0,j=0;//在给这些变量存入值之前都是undefined//循环forvar i = 0 ; i<10; i++) console.log(i);for(var i=0,j=10; i<10; i++, j++) console.log(i*j);for(var p in o) console.log(p);注:重复申明是合法的

变量作用域:

函数体内: 局部变量的优先级大于全局变量var global = "xx";function tesy(){var global = "rr";return global;    // "rr"}注:全局变量可以不写var 局部变量一定要写

函数作用域和申明提前:

函数内申明的所有变量对函数体内始终是可见的函数中声明的所有变量都被"提前"到函数体顶部。然后到var之地对其赋值如: var local = "xx";funtion test(){    console.log(local); // undefined    var local="dsds";    consle.log(local); // dsds}equals to :var local = "xx";funtion test(){    var local;    console.log(local); // undefined    local="dsds";    consle.log(local); // dsds}

作为属性的变量

声明一个全局变量,就等于定义了一个全局对象的一个属性。用var申明的一个变量是不可配置的 ,不能被删除。未声明的属性是可配置的(JS自动创建全局对象的属性)var x = 2;y = 3;this z =9;delete  x; //删不掉的delete this.z; // ok  delete y;  // ok

作用域链

阅读全文
0 0
原创粉丝点击