toString方法和string方法到區(qū)別
toString不能轉(zhuǎn)換undefined和null 其他轉(zhuǎn)換和String類似 但是用法不一樣 toString方法是被各個類型所擁有的,可以讓類型值直接調(diào)用,但是String方法是直接把要轉(zhuǎn)換的值
傳入String中
斷路原理
// 這種類似的題目,一般不考慮整體返回值,而是看前一句條件是否滿足,然后看后一句代碼是否執(zhí)行
var a = 2; var b = 3;
(a < b)&&(a = 5);
console.log(a);//5
var a = 6; var b = 3;
(a < b)&&(a = 5);
console.log(a);//6
var a = 2; var b = 3;
(a < b)||(a = 5);//2
console.log(a);
var a = 6; var b = 3;
(a < b)||(a = 5);
console.log(a);//5
字符串轉(zhuǎn)數(shù)字
三種方法
- 一元運算
- Numeber方法
- 減0
- parseInt - parseFloat
括號的作用
小括號的作用:
- 提升優(yōu)先級
- 函數(shù)調(diào)用
中括號的作用
1.定義數(shù)組
大括號的作用
- 定義對象
- 書寫代碼塊
三元運算符
// a ?b :c
// 先判斷a 如果a返回true 那么就執(zhí)行b 否則就執(zhí)行c
var num = true ? 3 : 2;
console.log(num);
var a = 2;
var b = 3;
// 如果a大于b 則彈出你好 否則 彈出滾蛋
// 方法1
if (a > b){
alert("你好");
} else{
alert("滾蛋");
}
// 方法2 三元運算
a > b ? alert("你好"):alert("滾蛋");
// 方法3 短路原理
a > b || alert("滾蛋");
a > b && alert("你好");
函數(shù)聲明
如果說一個函數(shù)被多次聲明,那么后邊的聲明會覆蓋前邊的聲明
函數(shù)調(diào)用無論寫在哪里,都能夠被調(diào)用
函數(shù)是默認被提升的(當(dāng)js開始執(zhí)行之前,會先把當(dāng)前作用域所有的函數(shù)全部提升到j(luò)s的最前邊讀?。?/p>
函數(shù)的參數(shù)
// 函數(shù)的參數(shù),函數(shù)在運行的時候需要一些外部的數(shù)據(jù)。那就是我們通過傳遞參數(shù)的形式實現(xiàn)
// 聲明函數(shù)時傳入的參數(shù)是 形參
// 調(diào)用函數(shù)時 傳入的參數(shù)是 實參
// 函數(shù)的參數(shù)不是必須的,js允許我們不書寫參數(shù)
function fn1(a){
console.log(a);
}
fn1();//函數(shù)需要參數(shù)但是沒有傳遞 這個參數(shù)返回undefined
function fn1(a,b){
console.log(a,b);
}
fn1(,'1');//目前不允許只傳遞某一位的參數(shù)
function fn1(name,name) {
console.log(name,name);
}
fn1("小王","老王");//如果函數(shù)的參數(shù)命名重復(fù),那么以后傳入的為準
// arguments?。。?!代表的是函數(shù)的實參 只能在函數(shù)內(nèi)部使用 直接使用
//是一個偽數(shù)組
function f() {
console.log(arguments);
}
f(1,2,3,4,5,5,6);
函數(shù)作用域
// 作用域就是變量與函數(shù)的可訪問范圍,即作用域控制著變量與函數(shù)的可見性和生命周期
// 作用域是按照函數(shù)來劃分的
// 一旦在當(dāng)前作用域聲明了一個變量,那么本作用域就不能使用祖輩作用域的變量
//作用域分為 全局作用域和局部作用域 (變量就分為 全局變量和局部變量)
//最外層就是全局作用域,最外層定義的變量就是全局變量
var a = 10;//全局變量
function fn1() {
var b = 20;//局部變量
console.log(b);//20
console.log(a);//10
}
console.log(a);//10
console.log(b);//b is not defined*/
// 當(dāng)使用一個變量的時候,先尋找自身有沒有定義這個變量,如果有 則不再使用父級作用的變量
var a = 1;
function fn1() {
var a = 2;
console.log(a);//2
function fn2() {
var a = 3;
console.log(a);//3
function fn3() {
var a = 4;
console.log(a);//4
}
}
}
var a = 1;
function fn1() {
a = 2;//在這個局部作用域中 沒有聲明a 但是給a 賦值 就要去看a在哪里聲明 然后把那個a的值改變了
//在這里把全局a的值改變?yōu)榱?2
console.log(a);//全局 a 2
function fn2() {
a = 3;//把全局的a為3
console.log(a);//全局 a 3
function fn3() {
a = 4; //把全局的a 變成4
console.log(a);//全局a 4
}
fn3();
}
fn2();
}
局部作用域
局部變量在執(zhí)行到當(dāng)前作用域的時候才會聲明
局部變量也是保存在內(nèi)存當(dāng)中的
但是當(dāng)前函數(shù)執(zhí)行完畢以后,局部變量就會被自動銷毀,可以節(jié)省內(nèi)存
并且其他作用域訪問不到,不會對當(dāng)前變量造成影
我們盡可能少的使用全局變量,因為占用內(nèi)存并且特別危險(任何地方都可以修改)