// =============================================================
// 第十一章 JavaScript更多主题
// =============================================================
// 类型转换
// 对于对象转数字,字符串,先.valueOf(), 然后toString(),
// 但是Date来说,+ 时,使用toString(), <>!= 比较时valueOf()
// 显示类型转换
// Boolean(X), Number(X), String(X), Object(X)
//
// 技巧:
// X + "" --> 字符串
// X - 0 --> 转数字
// !!X --> 转布尔值
//
// 数字转字符串
// toString(X) X 是基数,2 就是2进制,2-36之间
// toFixed(N) N 是保留小数点后几位
// toExponential(N) 指数计数法 整数部分1位,N 指定小数部分
// toPrecision(N) 显示N个有效数字,整数部分超过N的个数,就使用指数计数法显示
//
// 字符串转为数字
// parseInt() 用0开头的字符串就不用parseInt()去转换了,有可能会出错,第二个参数可以指定被解析数的基数2-36
// parseFloat()
//
// 引用类型:
(function(){
var xmas = new Date(2001, 11, 25);
var solstice = xmas;
// solstice.setDate(21);
// log(xmas.getDate());
// 因为->引用自身是使用值传递的
function add_to_totals(totals, x) {
// 对totals进行修改,会影响外部的对象,对其赋值就对外部没有影响了。
//totals = new Date(); // 所以->如果在函数体内对这个引用自身进行了改变,那么在函数外部是没有变化的
totals.setFullYear(x);
log(totals.getFullYear());
}
add_to_totals(xmas, 2015);
log(solstice.getFullYear());
function update_string(str) {
// 书上说:JavaScript为了效率起见,在复制和传递字符串时使用的是引用,但是比较的是值。
// 而由于没有可以修改字符串的方法,我们也就不能证明是否使用引用。
// 知道比较时使用的是值就OK了。
}
var s = "23456";
log(s);
update_string(s);
log(s)
})();
// ** 无用存储单元收集 **
// 使用标记和清除算法
// 没有使用到的变量将被清除。
//
// 词法作用域和嵌套函数
// NOTE:这部分要参考别的书籍才能理解。下一篇博客将会整理出来。