JavaScript 有7 种内置类型:null、undefined、boolean、number、string、object、symbol(ES6 中新增)。除对象外,其他类型统称为“基本类型”。
我们可以使用typeof 运算符来检查值的类型,它返回类型为字符串的值。
例如
类型未定义==="未定义"; //真的
typeof true==="boolean";//true
typeof 42==="数字";//true
typeof "42"==="字符串";//true
typeof {life:42}==="对象";//true
typeof Symbol==="symbol";//true
使用限定条件来检测空值的类型;
var a=null;
(!a typeof a==="对象"); //真的
Null 是一个“假值”,并且是唯一使用typeof 检测返回“对象”的基本类型值。
typeof function a(){}==="function";//true
typeof [1,2,3]==="object";//true
函数和数组都是对象的“子类型”。函数对象的长度属性是其声明的参数的数量。数组的长度属性是其元素的数量。
JavaScript 中的变量没有类型,只有值。变量可以随时保存任何类型的值。
例如
42 类型; //"细绳"
typeof 42 首先返回字符串“number”,然后typeof“number”返回“string”。
已在作用域中声明但尚未赋值的变量是未定义的。未在作用域中声明的变量是未声明的。
例如
如何检查全局变量DEBUG不会导致程序中的ReferenceError错误:
1.if(typeof DEBUG !=="未定义"){}
2. if(窗口.DEBUG){}
浏览器中的全局对象是window,访问不存在的对象属性(即使是在全局对象window上)也不会导致ReferenceError。
3.“依赖注入”设计模式,通过参数显式地将依赖项传递到函数中。
例如
函数doSomethingCool(FeatureXYZ){
var 助手=FeatureXYZ ||功能(){};
var val=助手();
}
第二章价值
第二章书籍概要1
第二章本书概要2 具体细节:
您可以使用删除运算符从数组中删除单元格,但请注意,删除单元格后,数组的长度属性不会改变。
创建“稀疏”数组(具有空白或空单元格的数组)时要特别注意:
例如
var a=[];
a[0]=1;
a[2]=[3];
a[1];//未定义
a.长度;//3
a[1] 的值是未定义的,但这与显式将其分配给未定义(a[1]=未定义)不同。
数组按数字索引,但它们也是对象,因此它们也可以包含字符串键和属性(但这些不计入数组长度)。
例如
var a=[];
a[0]=1;
a["foobar"]=2;
a.长度;//1
a["foobar"];//2
a.foobar;//2
如果字符串键可以转换为十进制数,则它将被视为数字索引。
例如
var a=[];
a["13"]=42;
a.长度;//14
在数组中包含字符串键/属性不是一个好主意。建议使用对象来存储键/属性值,使用数组来存储数字索引值。
有时需要将类似数组的数组(一组按数字索引的值)转换为真正的数组。实用函数slice() 通常用于此类转换:
函数foo(){
var arr=Array.prototype.slice.call(参数);
are.push("bam");
console.log(是);
}
foo("bar", "baz");//["bar","baz","bam"]
使用ES6中内置的函数工具Array.from()也可以实现同样的功能:
var arr=Array.from(参数);
字符串反转:
var a="foo";
var c=a
//将a的值转换为字符数组。分裂("")
//将数组中的字符反转。撤销()
//将数组中的字符拼接回字符串。加入("");
c;//"oof"
此方法对于简单字符串非常适用,但对于包含(Unicode,如星号、多字节字符串等)的字符串则不起作用。
JavaScript 中的数字常量通常用十进制表示。
例如
变量a=42;
var b=42.3;
前导0 可以省略:
变量a=0.42;
var b=.42;
小数点后小数部分最后一个0也可以省略:
var a=42.0;
变量=42。
42、这种写法没有什么问题,但不常见。不过考虑到代码的可读性,不建议这样写。
需要特别注意的是。运算符,因为它是有效的数字字符,并且首先被识别为数字常量的一部分,然后被识别为对象属性访问运算符。
//无效语法:
42.toFixed(3);//语法错误
//以下语法是有效的:
(42).toFixed(3);//"42.000"
0.42.toFixed(3);//"0.420"
42.toFixed(3);//"42.000"
二进制浮点数(不仅仅是JavaScript,而是所有遵循IEEE 754 规范的语言)最大的问题是会出现以下情况:
0.1 + 0.2===0.3; //错误的
最常见的方法是设置误差容限值,通常称为“机器epsilon”。对于JavaScript 数字,该值通常为2^-52 (2.230446049250313e-16)。
从ES6 开始,该值在Number.EPSILON 中定义。我们可以直接使用,也可以为ES6之前的版本编写polyfill:
if (Number.EPSILON){
Number.EPSILON=Math.pow(2, -52);
}
您可以使用Number.EPSILON 比较两个数字是否相等(在指定的误差范围内):
函数numbersCloseEnoughToEqual(n1,n2){
返回Math.abs(n1-n2) Number.EPSILON;
}
var a=0.1+0.2;
var b=0.3;
numberCloseEnoughToEqual(a,b);//true
numberCloseEnoughToEqual(0.0000001,0.0000002);//假
整数检测
if(!Number.isInteger){
Number.isInteger=函数(nun){
return typeof num="数字" num %1==0;
};
}
检查一个值是否是安全整数
if(!Number.isSafeInteger){
Number.isSafeInteger=函数(nun){
return Number.isSafeInteger(nun) Math.abs(nun)=Number.MAX_SAFE_INTEGER;
};
}
未定义类型只有一个值,即undefined。 null 类型也只有一个值:null。
例如
null 表示空值
undefined 表示没有值(缺失值)
或者
未定义意味着从未分配过值
null表示已赋值,但当前没有值
【揭秘JavaScript核心技巧:深度解析卷一精彩内容】相关文章:
2.米颠拜石
3.王羲之临池学书
8.郑板桥轶事十则
用户评论
看完这篇文章后感觉对 JavaScript 有更多了解了!
有13位网友表示赞同!
我一直在学习 JavaScript,这篇文章分享的内容正好是我所需要的内容。
有13位网友表示赞同!
《你不知道的JavaScript中卷》这本书看起来很不错啊,我也想去买一本学习学习。
有12位网友表示赞同!
第一次听说这本书,感觉标题很有吸引力,想问问这本书讲些什么?
有6位网友表示赞同!
分享读书笔记真是太棒了!可以让我们快速了解这本书的核心内容。
有10位网友表示赞同!
对 JavaScript 的“卷”的概念还是比较感兴趣的,作者怎么解释这个 “卷”?
有18位网友表示赞同!
学习编程一直是我的梦想,这样的读书笔记对我来说很有帮助!
有11位网友表示赞同!
希望还能看到后续的读书笔记呢,期待学习更多有趣的知识!
有11位网友表示赞同!
这篇文章让我对 JavaScript 的一些特性有了新的认识。
有11位网友表示赞同!
感觉作者的写作风格很通俗易懂,容易让人理解。
有18位网友表示赞同!
JavaScript真是个神奇的语言!这本书一定能让我了解它的更深层面。
有6位网友表示赞同!
学习编程需要不断探索和实践,这样的读书笔记可以为我提供方向。
有16位网友表示赞同!
分享你的阅读体会很 inspiring!
有12位网友表示赞同!
对于新手来说,这样的读书笔记非常实用。
有11位网友表示赞同!
我一直想深入了解 JavaScript 的细节,这本书是个不错的选择。
有11位网友表示赞同!
期待看完这本书后,我能写出更优雅的 JavaScript 代码。
有8位网友表示赞同!
学习编程是一件很有乐趣的事!这篇文章让我更加兴奋起来!
有19位网友表示赞同!
我印象深刻的是作者对于 JavaScript 的某一个方面的解释,非常详细清晰。
有9位网友表示赞同!
感谢作者分享这些宝贵知识!
有10位网友表示赞同!