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

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


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

1. 全局属性: 如undefined、infinity和NaN
2. 全局函数:如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 // 比较前字符串转换成数字 true
0 == false // 比较前布尔值转换为数字 true
"0" == false // 之前都转换为数字 true

显示类型转换:

Number("3") // 3
String(fasle) // "false" / false.toString()
Boolean([]) // true
Object(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
他们都会忽略前导空格,和数字后面的内容。 如果第一个非空字符是非法的返回NaN
parseInt(" 123 meters") // 123
parseFloat("0xFF") // 255
parseInt("0.1") // 0
parseInt(".1") // NaN

else 
parseInt 可接受第二个参数 表示转换的进制
parseInt("34",2)

对象转化为原始值:

对象转字符串
toString() // 没有这个方法 调用valueof
valueof()  // 还是没有 报错

对象转数字  
valueof()  // 没有这个方法 调用toString
toString() // 还是没有 报错 

其他
var now = new Date(); //日期对象
typeof(now +1)  // string
typeof(now - 1) // number
now == now.toString() // true
now > (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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值