深入那些曾经忽略的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中曾经忽略的知识点的更多相关文章

  1. html css <input> javaScript .数据类型 JS中的函数编写方式 BOM总结 DOM总结

    Day27  html css div 块标签. 特点: 独占一行,有高度和宽度 span 行元素. 特点:在同一行显示,当前行满了自动去下一行显示. 不识别高度和宽度 1.1.1.1 2.输入域标签 ...

  2. 【javascript】数据类型中的一些小知识点

    1. undefined 和 null undefined是一个变量而不是一个关键字,所以可以被重新赋值.为了避免歧义,一般推荐用void 0 来获取undefined: null是一个关键字,所以可 ...

  3. 【JavaScript】js 中一些需要注意的问题

    关于js中逻辑运算符 sort()方法 1. 关于js中逻辑运算符:|| 和 && 在js逻辑运算中,0."".null.false.undefined.NaN都会 ...

  4. javascript基础-js对象

    一.js对象的创建 1.普通最简单的方式 var teacher = new Object( ); teacher.name = "zhangsan"; teacher.age = ...

  5. javascript基础-js继承

    1.prototype方式 示例:没有使用prototype(下列这些代码只能获取array1数组的总和,而无法对array2数据进行求和) var array1 = new Array(1,4,9, ...

  6. JavaScript基础 -- js常用内置方法和对象

    JS中常用的内置函数如下: 1.eval(str):计算表达式的结果. 2.parseInt(str,n):将符串转换成整数数字形式(可指定几进制). 3.parseFloat(str):将字符串转换 ...

  7. Javascript 基础--JS函数(三)

    一.基本概念:未完成某一个功能的代码(语句,指令)的集合. 二.函数的调用方式: 2.1.函数名(传递参数1,传递参数2)   基本语法 function 函数名(参数列表){ //代码; retur ...

  8. JS基础-----JS中的分支结构及循环结构

    [分支结构] 一.if-else结构 1.结构的写法:if(判断条件){ //条件为true时,执行if的{} }else{ //条件为false时,执行else的{} } 2.注意事项 ①else语 ...

  9. 【JavaScript】JS 中 原始字符串 和 HTML 字符转换

    参考资料:http://www.sjyhome.com/javascript/js-html-escape.html JS转换HTML转义符 SJY • 发表于:2013年10月05日 17:04 • ...

随机推荐

  1. PHP加水印代码 支持文字和图片水印

    PHP加图片水印.文字水印类代码,PHP加水印类,支持文字图片水印的透明度设置.水印图片背景透明.自己写的一个类,因为自己开发的一套CMS中要用到,网上的总感觉用着不顺手,希望大家也喜欢这个类,后附有 ...

  2. PHP 下载远程图片

    方法一:file_get_contents /**-- 下载远程文件 --**/ function down_img($url){ set_time_limit(60); if($url==" ...

  3. HDU -2100-Lovekey

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=2100 这题开始一直想着先把26进制转换成10进制,在转换成26进制,又200个字符因而行不通, 直接卡 ...

  4. #图# #SPFA# ----- codevs1021 玛丽卡

    codevs1021 玛丽卡 题目描述 Description麦克找了个新女朋友,玛丽卡对他非常恼火并伺机报复.因为她和他们不住在同一个城市,因此她开始准备她的长途旅行.在这个国家中每两个城市之间最多 ...

  5. IIS 启用w3wp.exe调试 没有找到w3wp进程

    必须条件: 在进程列表的下面,有个show processes in all sessions,把它勾上就能看到了 . VS中附加进程的方式调试IIS页面,以及设置断点无效问题解决 以前调试网站的时候 ...

  6. SVGEditor

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. 利用谷歌开源工具cAdvisor 结合influxdb存储+Grafana前端展示进行Docker容器的监控

    一.Docker 监控方式 1.利用docker 的 docker stats API 命令: docker stats [容器ID/容器名称] [root@docker ~]# docker sta ...

  8. Linux笔记(十一) - 文件系统管理

    (1)文件系统查看命令:df [选项] [挂载点]-a 显示所有文件系统信息,包括特殊文件系统,如/proc /sysfs-h 使用习惯单位显示容量,如KB,MB或GB-T 显示文件系统类型-m 以M ...

  9. SoapUI:使用Excel进行参数化

    本章中学习如下内容: 1)         使用DataSource调用Excel中的数据给接口参数化: 2)         使用DataSource Loop使得测试用例根据Excel中的取值循环 ...

  10. Ubuntu16.04安装GTK3主题:OSX-Arc

    Ubuntu16.04安装GTK3主题:OSX-Arc GTK3主题:OSX-Arc描述: 前几个月,Gnome3.20升3.22的时候,出现了大量主题崩溃的现象,其中包括Arc.Flatabulou ...