1.parseInt(a,b),接受2個參數,表示將b進制下的a轉爲10進制數;而不是將十進制下的a轉爲b進制下的數。javascript
parseInt(1,2);//1,將2進制下的1轉爲10進制下的數字,結果爲1
parseInt(10,2);//2,將2進制下的10轉爲10進制下的數字,結果爲2
parseInt(3,2);//NaN,將2進制下的3轉爲10進制下的數字,結果爲NaN,由於任何一位的數都不能超過進制數。
parseInt(13,2);//1,將2進制下的13轉爲10進制下的數字,結果爲1,由於任何一位的數都不能超過進制數,因此只能截取前面不超過的數,因此parseInt(13,2)其實是parseInt(1,2),因此結果爲1。
複製代碼
--第一個是要處理的值,指望是含數字的字符串(含有數字的字符串有非數字字符,最後只保留數字部分)。java
parseInt(32);//32. parseInt(‘32px’);//32
複製代碼
--第二個是進制基數,若是第一個參數不符合基數的進制規範,則嘗試截取前面符合規範的部分,若截取不到合規的,轉爲NaN。接受範圍爲2到36。若不傳,或傳0則識別爲10.正則表達式
2.setTimeout,接受3個參數, --第一個爲回調函數, --第二個爲計時時間, --第三個爲傳入回調函數的參數數組
setTimeout(function(value){
console.log(value);
},1000,100);
//大約一秒後輸出100。
複製代碼
3.對象在底層表現爲二進制,在js中,二進制前三位都是0的話就會被斷定爲object類型,而null二進制表示全是0,因此typeof時是object。bash
typeof null = ‘object’;
複製代碼
4.空數組執行reduce會拋錯,由於reduce找不到初始值。函數
[].reduce(()=>{});
//Uncaught TypeError: Reduce of empty array with no initial value
// at Array.reduce (<anonymous>)
// at <anonymous>:1:4
複製代碼
5.在加號與三木運算符並存的表達式中,若是沒有括號標識,那麼加號的優先級高於三木運算符。學習
var a = 'world';
var b = 'hellow' + a === 'world' ? a : '';
console.log(b); // world
複製代碼
6.Math.pow(2, 53),也就是9007199254740992,再增長1返回的仍是自己,可是增長2就會成功,ui
9007199254740992 + 1;//9007199254740992。
9007199254740992 + 2;//9007199254740994。
複製代碼
也就是說:spa
9007199254740992 + 奇數=9007199254740992 + 奇數-1.
9007199254740992 + 偶數=9007199254740992 + 偶數.
複製代碼
7.數組的filter方法在執行時若遇到空的元素,會忽略,而不執行該次回調。prototype
var arr = [1,2,,,,2,1];
arr.filter(x=>{
return x !== 2;
})
// [1, 1]
複製代碼
8.浮點型計算時精度丟失。
0.1 + 0.2 === 0.3 //false
0.1 + 0.2 // 0.30000000000000004
複製代碼
因此這種場景的判斷方式是:
0.3 - (0.1 + 0.2) < Number.EPSILON // true
Number.EPSILON // 2.220446049250313e-16
複製代碼
9.new String('str') 與 String('str') 。
typeof new String('str'); //「object」,
複製代碼
new String('str')返回的實例有length,有每個字符對應一個下標,PrimitiveValue即原始值爲str
typeof String('str’) // 「string」, 複製代碼
值爲new String('str’)的原始值。 能夠說new String('str’)至關於給’str'加了一層封裝,還能夠這樣來封裝:
var str = ’str’;
Object(str); // 返回的結果與new String('str’)一致。 複製代碼
解封的方法是使用valueOf,能夠獲取原始值:
var str = 'str';
var obj = Object(str);
obj.valueOf(); // "str"
複製代碼
10.數組的構造函數的原型對象是一個數組,即
Array.isArray(Array.prototype); // true,
複製代碼
只不過默認下Array.prototype.length爲0. 由於全部的數組實例都要繼承來自Array.prototype上的方法和屬性,因此這樣無疑更合理。
11.數組的map方法,當遇到空元素時,不走回調,而是直接將空元素返出去。
var arr =[];
arr.length = 4;
arr[0]=2
arr[3]=2
arr.map(function(elem) { return '1'; });
//["1", empty × 2, "1」] 複製代碼
12.常規函數(非箭頭函數)中的arguments是一個數組對象,即一個引用類型(因此對其中各元素的修改會影響原數組),其中callee屬性表示當前函數對象,length表示數組中的參數個數,即當前函數執行時傳入的實參的個數。
function func(a,b,c){
console.log(typeof arguments);//object
console.log(arguments.callee);
//ƒ func(a,b,c){
// console.log(typeof arguments);
// console.log(arguments.callee);
// console.log(arguments.length);
//}
console.log(arguments.length);//2
}
複製代碼
13.Number.MIN_VALUE的值爲5e-324,即5 / 10 ^324,因此Number.MIN_VALUE是大於0的;
Number.MIN_VALUE > 0;//true
複製代碼
14.不論數組嵌套多少層,數組的tostring方法都會把它拍平,而後把各個元素轉換後的值連接成一個字符串。
[[[2,3,4]]].toString(); //'2,3,4'
[[[[],2,3,4,5],1]].toString(); //",2,3,4,5,1"
[[[{},2,3,4,5],1]].toString();// "[object Object],2,3,4,5,1」 複製代碼
15.逗號運算符:最後一個值,覆蓋前面的值.
var val = (1,2,3);
console.log(val); // 3
複製代碼
16.關於數字與.的關係
1.toString(); //拋錯
1..toString(); // '1'
1...toString();//拋錯
.1.toString(); // '0.1'
複製代碼
原理分析: js中,當一個數字中有點(.)存在,不論是在數字裏面仍是數字左右兩邊(要跟數字是緊密連在一塊兒的),第一個點(.)都會被識別爲數字的一部分,第二個點纔會被識別爲點運算符。 js中,整數和小數都會統一被認爲是數字類型,若是直接把數字中的點識別爲點運算符,那麼小數0.42中的點就沒法判斷其究竟是小數點仍是點運算符了,甚至能夠被理解爲0這個數字對象的名爲42的屬性,這顯然是不對的,因此爲了兼容小數的存在,把數字裏面出現的第一個點(跟數字緊密聯繫在一塊兒的)認爲是數字的一部分,即小數點,而第二個點才被識別爲點運算符。 解決:把1.toString();變爲(1).toString();或者1 .toString();便可。
17.兩個看起來同樣的正則並不相等
var regA = /reg/;
var regB = /reg/;
regA == regB;//false
regA === regB;//false;
複製代碼
由於typeof regA/typeof regB結果均爲’object’。正常的對象類型都是引用類型,實際上都是存在堆內存裏的,變量所持有的都只是地址,因此兩個不一樣的正常的對象類型的地址是必定不相同的。
18.數組之間沒法用 == 和 === 進行比較,可是可使用 > 和 < 來進行比較。
var a=[10,20,30];
var b=[10,20,31];
a<b // true
var a=[10,20,30];
var b=[10,20,31];
a>b // false
複製代碼
19.函數擁有prototype屬性,是一個對象,可是經過.prototype與getPrototypeOf獲取的原型對象並非同一個。
function func(){}
func.prototype === Object.getPrototypeOf(func); //false
複製代碼
由於func.prototype指的是由func實例化出來的實例的原型。而Object.getPrototypeOf(func)獲取的對象指的是Function.prototype,而func是Function的實例。
20.函數對象擁有name屬性,具名函數的name就是函數的名字,可是匿名函數的name是一個空字符串。
(function func(){}).name;//func
(function(){}).name;//''
複製代碼
該name是隻讀屬性,一旦函數聲明,不容許修改。
function func(){};
func.name = 'foo';
console.log(func.name);//func
複製代碼
21.函數實例的原型對象也擁有name屬性,可是爲空字符串(考慮到匿名函數)。
function func(){};
var proto = Object.getPrototypeOf(func);
proto.name // ''
複製代碼
22.eval方法會將函數的名字轉譯爲函數自己.
function func(){};
eval('func');//function func(){}
typeof eval('func’); // 'function' 複製代碼
23.函數是有length屬性的,length的值取決於該函數的形參的個數。
function func(a,b,c){}
func.length;//3
複製代碼
函數對象的構造函數也有length屬性,
Function.length;//1
複製代碼
24.replace接受兩個參數, 第一個參數能夠爲字符串或者一個正則表達式。 第二個參數爲一串字符串或者一個函數,這個字符串或者這個函數的返回值來替換第一個參數在replace調用者中的匹配項。 當第一個參數爲字符串或者爲不加g規則的正則時,只替換匹配到的第一個。 當第一個參數爲加了g規則的正則時,替換全部匹配到的項。 回調函數接受三個參數,第一個爲本次匹配到的項,第二個爲匹配項的偏移、索引,第三個爲調用replace的調用者。
var str = '123123123';
str.replace('1','9'); //923123123
var str = '123123123';
str.replace('1',function(){return '9';}); //923123123
var str = '123123123';
str.replace(/1/,'9'); //923123123
var str = '123123123';
str.replace(/1/,function(){return '9';}); //923123123
var str = '123123123';
str.replace(/1/g,function(){return '9';}); //923923923
var str = '231';
str.replace(/1/g,function(a,b,c){
console.log(a); //1
console.log(b); // 2
console.log(c); // '231'
});
複製代碼
25.正則的test方法在被傳入null或者空時,會將null轉化爲’null’,將空轉換爲’undefined’。
var reg = /n/;
reg.test(null);//true
reg.test();//true
複製代碼
26.在定義數組時,javascript容許一個尾隨逗號.
[1, 1, 1, ].join('*'); //"1*1*1"
複製代碼
27.在實例化Date函數的時候即new Date()的時候, --若是傳入的參數爲非數字且不是一個符合規則的日期字符串,那麼返回的結果爲’Invalid Date’,儘管它依然是一個實例對象,但他是無效的,由於時間在內部會保留爲一個有效數字,但這個實例內部保留的是NaN。
new Date('sdfsdf'); // Invalid Date
new Date([]); //Invalid Date
複製代碼
--若是什麼都不傳入,返回的就是當天的標準時間對象
new Date();//Tue Aug 06 2019 19:15:18 GMT+0800 (中國標準時間)(是的,就是寫這篇筆記的時間)
複製代碼
--若是傳入的是一個符合規則的日期字符串,獲得的就是對應的標準時間對象
new Date("2014-03-19」);//Wed Mar 19 2014 08:00:00 GMT+0800 (中國標準時間) 複製代碼
--若是傳入的是一個有效數字,將識別爲毫秒數,返回的值就是是1970年1月1日當天8點再加上傳入毫秒數獲得的時間的標準時間對象。
new Date(0); // Thu Jan 01 1970 08:00:00 GMT+0800 (中國標準時間)
new Date(1000); // Thu Jan 01 1970 08:00:01 GMT+0800 (中國標準時間)
複製代碼
--若是傳入的是兩個,第一個識別爲年份,第二個識別爲月份(此時的月份以0爲始)
new Date(2019,1);// Fri Feb 01 2019 00:00:00 GMT+0800 (中國標準時間)
複製代碼
--若是傳入的是三個,第三個識別爲日期
new Date(2019,1,2); //Sat Feb 02 2019 00:00:00 GMT+0800 (中國標準時間)
複製代碼
--若是傳入的是四個,第四個識別爲小時
new Date(2019,1,2,12);//Sat Feb 02 2019 12:00:00 GMT+0800 (中國標準時間)
複製代碼
--若是傳入的是五個,第五個識別爲分鐘
new Date(2019,1,2,12,12);//Sat Feb 02 2019 12:12:00 GMT+0800 (中國標準時間)
複製代碼
--若是傳入的是六個,第六個識別爲秒
new Date(2019,1,2,12,12,12);//Sat Feb 02 2019 12:12:12 GMT+0800 (中國標準時間)
複製代碼
--若是傳入的是七個,第七個識別爲毫秒,而且若是毫秒知足進位,則進位。
new Date(2019,1,2,12,12,12,1000);//Sat Feb 02 2019 12:12:13 GMT+0800 (中國標準時間)
複製代碼
28.Date函數執行的時候,不論裏面傳入的值是什麼,又是什麼類型,返回出來的都是當天的標準時間的日期字符串。
Date(0); //"Tue Aug 06 2019 19:03:55 GMT+0800 (中國標準時間)"
Date(100000); //"Tue Aug 06 2019 19:04:02 GMT+0800 (中國標準時間)"
Date('asdasdasdasdasdasd'); //"Tue Aug 06 2019 19:04:11 GMT+0800 (中國標準時間)"
Date([]); //"Tue Aug 06 2019 19:05:06 GMT+0800 (中國標準時間)"
複製代碼
29.執行Math.min()而不傳參數的時候,獲得的結果是Infinity,執行Math.max()而不傳參數的時候,獲得的結果是-Infinity。
Math.min();//Infinity
Math.max();//-Infinity
複製代碼
30.字符串的match方法,會將字符串轉換爲正則表達式,而不進行對特殊符號的轉譯。因此致使/會被.匹配到。
'/gif'.match('.gif’);//["/gif", index: 0, input: "/gif", groups: undefined] 複製代碼
須要聲明的一點是,我不是一個教授者,我只是一個分享者、一個討論者、一個學習者,有不一樣的意見或新的想法,提出來,咱們一塊兒研究。分享的同時,並不僅是被分享者在學習進步,分享者亦是。
知識遍地,拾到了就是你的。
既然有用,不妨點贊,讓更多的人瞭解、學習並提高。