Javascript基础 - js中曾经忽略的知识点
深入那些曾经忽略的Javascript知识
1. parseInt(string, [radix]),parseFloat(string)
一般我们省略第二个参数,parseInt(‘100’) === 100,此时默认认为‘100’是一个十进制数的字符串。
parseInt(‘100’,10),100
parseInt(‘100’,2),4
parseInt(‘-FF’,10),-255
parseFloat(‘3.0’),3//小数位为0得到3
parseFloat(‘3.0001sss’),//3.0001 从0位开始截取有效数字字符串
2. typeof null,null instanceof Object
typeof null;//’object’,null是一个原生非可调用对象
null instanceof Object;//false,可以理解null是一个空对象(对象占位符),而不是一个实例
typeof undefined === ‘undefined’
typeof null === ‘object’
a = {b:1}, typeof a === ‘object’ //a为一个引用类型
typeof 9 === ‘number’
typeof ‘seed’ === ‘string’
typeof false === ‘boolean’
js的原始类型包括:Number,Boolean,Null,String,Undefined
3. [1,2,3].reduce(function(pre,current){return pre*current},2) === 12
Reduce方法接收一个接收previousValue和nextValue,返回当次计算结果回调方法,还有一个初始参数
4. 3+(3===3)?'some':'any' === ‘some’
+运算符的优先级高于?:,所以3+(3===3) === 4,所以输出’some’
5. var name = 'World!';
(function () {
if (typeof name === 'undefined') {
var name = 'Jack';
console.log('Goodbye ' + name);
} else {
console.log('Hello ' + name);
}
})();
输出’Goodby Jack’,当注释掉var name = 'Jack';则输出’Hello World!’
6. arr=[1,2,3];arr[10]=0;
arr.filter(function(number){return number === undefined});//[]
此时
arr :[1, 2, 3, undefined × 7, 0];
arr.length === 11;
filter方法遍历的是arr的key,我们可以通过
arr.hasOwnProperty('1') === true
arr.hasOwnProperty('10') === true
arr.hasOwnProperty('6) === false
所以filter方法其实只会遍历到’0’,’1’,’2’,’10’这四个key,而3-9这6个key不存在,当然arr['6'] === undefined是成立的。所以数组中key的缺失和为一个key赋值为undefined也是不一样的。Array的map,forEach也是根据index key是否初始化来判断是否进行操作。
使用如下方法克隆arr
arr2 = JSON.parse(JSON.stringify(arr))
得到的arr2为:[1, 2, 3, null, null, null, null, null, null, null, 1]
可见stringify方法在遍历数组时发现缺失的key用null做了默认值。
7. 0.2 – 0.1 === 0.1
But
0.3 – 0.2 === 0.09999999999999998
0.8 - 0.6 === 0.20000000000000007
通过这三组计算我们发现js没有准确的数字,尤其是减法,但我们可以发现如果用toFixed方法就可以四舍五入的到固定位数的浮点数
(0.8-0.6).toFixed(2) === ‘0.20’
(0.8-0.6).toFixed(1) === ’0.2’ == 0.2
(0.8-0.6).toFixed(1) == 0.2
再使用parseFloat((0.8-0.6).toFixed(1)) === 0.2
8. 这里还是数字的坑,parseInt(233.001,0)相当于parseInt(233.001,10),parseInt(233.001),parseInt(1000.22,false),
parseInt(1000.22,undefined),parseInt(1000.22,null)
parseInt的第二个参数为0,undefined,null,false,10,缺失,都认为是十进制
9. [1]==[1] === false
对象比较的是地址,等号前后的[1]分别是不同的对象,引用不同,所以不相等
B=[2,3,4];C=B
则B==C === true, B===C === true
[2,3,4]==[2,3,4] ===false
10. a=[1,3],b=[1,5],c=[1,5]
b == c //false
b === c //false
a < b//true
每个数组对象是不一样的实例,用 == 或 === 比较的时候,其实比较的是对象引用,所以b === c //false,但对于大于小于,会按照数组从前往后进行比较。
其实不止数组,对于按数字索引的对象如:String也是如此
m = new String('sdfg');
n = new String('sdfz');
p = new String('sdfz');
q=new String(‘a’);
所以p == n //false
p>n//false
p<n//false
p>q//true
m<n//true
11. Prototype,__prpto__,Object.getPrototypeOf
function User = function(params){
this.name = params.name;
this.id = params.id;
}
User.prototype.greet = function(){
alert(‘Hi,I am ’ + this.name + ‘!’);
}
User.ptototype //Object{},得到的是 User的实例的prototype
Object.getPrototypeOf(new User())//Object{}, getPrototypeOf是获取一个实例的prototype的标准方法
Object.getPrototypeOf(User)//function(){},js中除了原始数据类型,都是对象,function User,就是Function的一个对象实例
User instanceof Function === true
__ptoto__ 是获取实例的prototype的非标准方法
12. "1 2 3".replace(/\d/g, function(a,b){
console.log(a);console.log(b);
return a%2;
}) === ‘1 0 1’
String.prototype.replace接收一个正则和一个回调,每次调用回调函数会传递[Item,Index]这样的两个参数,
13. eval(null) === ‘null’, eval(undefined) === ‘undefined’
eval('var v=12,b="12"'),将申明v和b两个变量
部分内容参考自:http://ourjs.com/detail/52fb82e13bd19c4814000001
Javascript基础 - js中曾经忽略的知识点的更多相关文章
- html css <input> javaScript .数据类型 JS中的函数编写方式 BOM总结 DOM总结
Day27 html css div 块标签. 特点: 独占一行,有高度和宽度 span 行元素. 特点:在同一行显示,当前行满了自动去下一行显示. 不识别高度和宽度 1.1.1.1 2.输入域标签 ...
- 【javascript】数据类型中的一些小知识点
1. undefined 和 null undefined是一个变量而不是一个关键字,所以可以被重新赋值.为了避免歧义,一般推荐用void 0 来获取undefined: null是一个关键字,所以可 ...
- 【JavaScript】js 中一些需要注意的问题
关于js中逻辑运算符 sort()方法 1. 关于js中逻辑运算符:|| 和 && 在js逻辑运算中,0."".null.false.undefined.NaN都会 ...
- javascript基础-js对象
一.js对象的创建 1.普通最简单的方式 var teacher = new Object( ); teacher.name = "zhangsan"; teacher.age = ...
- javascript基础-js继承
1.prototype方式 示例:没有使用prototype(下列这些代码只能获取array1数组的总和,而无法对array2数据进行求和) var array1 = new Array(1,4,9, ...
- JavaScript基础 -- js常用内置方法和对象
JS中常用的内置函数如下: 1.eval(str):计算表达式的结果. 2.parseInt(str,n):将符串转换成整数数字形式(可指定几进制). 3.parseFloat(str):将字符串转换 ...
- Javascript 基础--JS函数(三)
一.基本概念:未完成某一个功能的代码(语句,指令)的集合. 二.函数的调用方式: 2.1.函数名(传递参数1,传递参数2) 基本语法 function 函数名(参数列表){ //代码; retur ...
- JS基础-----JS中的分支结构及循环结构
[分支结构] 一.if-else结构 1.结构的写法:if(判断条件){ //条件为true时,执行if的{} }else{ //条件为false时,执行else的{} } 2.注意事项 ①else语 ...
- 【JavaScript】JS 中 原始字符串 和 HTML 字符转换
参考资料:http://www.sjyhome.com/javascript/js-html-escape.html JS转换HTML转义符 SJY • 发表于:2013年10月05日 17:04 • ...
随机推荐
- linx建立用戶&組
groupadd test 创建test用户组 useradd user1 创建user1用户 passwd user1 ...
- 漂亮的PHP验证码
<?php class Imagecode{ private $width ; private $height; private $counts; private $distrubcode; p ...
- Struts2文件的上传
一.单文件的上传 表单的enctype属性: application/x-www-form-urlencoded:默认的编码方式. multipart/form-data:会以二进制的方式处理表单数 ...
- Eclipse 使用说明
2. 使用技巧 2.1. Eclipse 打开文件所在文件夹 2.2. Mac 安装Eclipse 2.3. Eclipse 安装插件 2.4. Eclipse 工具栏不见了 2.5. Eclipse ...
- php判断IE浏览器
<?php/** * 检测用户当前浏览器 * @return boolean 是否ie浏览器 */ function chk_ie_browser() { $userbrowser = $_SE ...
- Everything开机自启
第一步:关闭自动启动 在设置中关闭everything开机自动启动. 第二步:创建计划任务 点击“开始”—“任务计划程序”—“创建任务” 首先设置任务的名称等,注意一定要勾选“使用最高权限运行”. 然 ...
- EF 4.1 学习资源汇总
微软发布了EF 4.1以后,结合asp.net mvc3,网站的开发可谓是非常方便.但是作为一种新技术,如何开始你的学习之路呢? 首先是关于 EF 4.1的安装和介绍,以及nuget的使用. http ...
- doubango(3)--协议栈的启动过程
协议栈启动的上层接口 对于Doubango中得sip协议栈,是通过SipStack类粘合上层代码与底层代码的,该类定义在SipStack.h中,实现在SipStack.cxx中.当构造好一个SipSt ...
- LinuxMint18配置Grub2默认启动操作系统
---恢复内容开始--- 之前电脑里面装了太多系统太乱了,刚好假期回家有一些空闲时间于是开始了重装计划. 现在重新弄好了,有两个系统,一个是Windows10,另一个是LinuxMint18,但是我平 ...
- 通过浏览器navigator判断浏览器版本或者手机类型&&判断微信访问
javascript 的navigator属性,不常用,但是用处也不少,主要用处是在做浏览器兼容的问题的时候,现在有的网站已经不兼容IE6,用户假如用IE6浏览网页的话,会提示浏览器升级等信息.或者判 ...