小學(xué)數(shù)學(xué)中老師有教你+這個(gè)符號(hào)本身等于多少?
為西山等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計(jì)制作服務(wù),及西山網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站建設(shè)、西山網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!
js中+有兩個(gè)用處:
是數(shù)學(xué)意義的加號(hào),1+2=3這里是1和2的值加法運(yùn)算結(jié)果等于3,并不是+號(hào)本身等于3
2.是連字符:一個(gè)變量name值為:tom,那么:"你好"+name結(jié)果是:你好tom。
[img]一般情況下,URL
中的參數(shù)應(yīng)使用
url
編碼規(guī)則,即把參數(shù)字符串中除了
-_.
之外的所有非字母數(shù)字字符都將被替換成百分號(hào)(%)后跟兩位十六進(jìn)制數(shù),空格則編碼為加號(hào)(+)。
但是對(duì)于帶有中文的參數(shù)來說,這種編碼會(huì)使編碼后的字符串變得很長。
如果希望有短一點(diǎn)的方式對(duì)參數(shù)編碼,可以采用
base64
編碼方式對(duì)字符串進(jìn)行編碼,但是
base64
編碼方式不能處理
JavaScript
中的中文,因?yàn)?/p>
JavaScript
中的中文都是以
UTF-16
方式保存的。
而
base64
只能處理單字節(jié)字符,所以不能直接用
base64
對(duì)帶有中文的
JavaScript
字符串進(jìn)行編碼。
但是可以通過
utf.js
這個(gè)程序中提供的
utf16to8
來將
UTF-16
編碼的中文先轉(zhuǎn)化為
UTF-8
方式,然后再進(jìn)行
base64
編碼。
這樣編碼后的字符串,在傳遞到服務(wù)器端后可以直接通過
base64_decode
解碼成
UTF-8
的中文字符串。
但是還有個(gè)問題需要注意。
base64
編碼中使用了加號(hào)(+),而
+
在
URL
傳遞時(shí)會(huì)被當(dāng)成空格,因此必須要將
base64
編碼后的字符串中的加號(hào)替換成
%2B
才能當(dāng)作
URL
參數(shù)進(jìn)行傳遞。
否則在服務(wù)器端解碼后就會(huì)出錯(cuò)。
所以我們需要做的就是encodeURI(str).replace(/\+/g,'%2B')
以上就是小編為大家?guī)淼臏\談在js傳遞參數(shù)中含加號(hào)(+)的處理方式全部內(nèi)容了,希望大家多多支持腳本之家~
js中加號(hào)+ 運(yùn)算符可以用在一元運(yùn)算 與 二元運(yùn)算?
1,? 一元運(yùn)算請況
語法: ?+ Expression
???+'號(hào)運(yùn)算符作為一元運(yùn)算符時(shí),Expression將進(jìn)行 ToNumber() 操作
經(jīng)常使用 +a 類似的形式對(duì)變量a進(jìn)行類型轉(zhuǎn)換 ,如下:
?const a = '1';
? +a? // 輸出為1 (變?yōu)閚umber類型);
ToNumber( argument )轉(zhuǎn)換方式:
Undefined:? return NaN,
Null:return +0,
Bollean: true return 1,false return 0,
Number:? return value
String:??若字符串為純數(shù)字時(shí)返回轉(zhuǎn)換后的數(shù)字;非純數(shù)字返回NaN
Symbol? 拋出?TypeError 異常
Object? ?進(jìn)行以下步驟:
? ? ? ? ?1.先進(jìn)行ToPrimitive(argument, hint Number)得到rs;? ?2.然后返回 ToNumber(rs)的結(jié)果。
語法: ToPrimitive ( input [, PreferredType] )
參數(shù):
①參 input :傳入的值。
②參數(shù) PreferredType :可選,需要被轉(zhuǎn)換的類型。 '+'加號(hào)作為一元運(yùn)算符時(shí),此值為“number”;而作為二元運(yùn)算符時(shí),未傳遞此值,以默認(rèn)的“default”代替。
2. 二元運(yùn)算符
2.1 解析步驟
簡單概括為下面4個(gè)步驟:
1) 值進(jìn)行GetValue()操作。
2) 值進(jìn)行ToPrimitive()操作,
3) 若一方為String類型,2個(gè)值都進(jìn)行ToString()轉(zhuǎn)換,最后進(jìn)行字符串連接操作。
4) 若都不是String類型,2個(gè)值都進(jìn)行ToNumber()轉(zhuǎn)換,最后進(jìn)行算數(shù)加法運(yùn)算。
2.2.1 方法簽名
語法: ToPrimitive ( input [, PreferredType] )
參數(shù):
①參?input :傳入的值。
②參數(shù)?PreferredType :可選,需要被轉(zhuǎn)換的類型。'+'加號(hào)作為一元運(yùn)算符時(shí),此值為“number”;而作為二元運(yùn)算符時(shí),未傳遞此值,以默認(rèn)的“default”代替。
2.2.2 解析說明
ToPrimitive()的詳細(xì)解析過程可以看這里:
簡化為以下步驟:
( PreferredType是為 非基礎(chǔ)類型 決定是優(yōu)先使用valueOf方法還是toString方法,對(duì)基礎(chǔ)類型無效),指定為number優(yōu)先使用valueOf方法,指定string,優(yōu)先使用toString方法
1) 若input類型為原始值(如:Undefined、Null、Boolean、Number、String、Symbol),直接返回input的本身 。 直接忽略 PreferredType
2) 若input類型為object(如:Array、Object、Date),將根據(jù)第②個(gè)參數(shù) PreferredType 的值進(jìn)行以下操作:
就像之前講的,'+'加號(hào)作為一元運(yùn)算符時(shí), 傳遞參數(shù) PreferredType 的值為“number”;而作為二元運(yùn)算符時(shí),未傳遞此值時(shí)以默認(rèn)的“default”代替。
在上面的圖中,只看到 PreferredType 的值為“number” 或 “string” 時(shí)才進(jìn)行解析,那么默認(rèn)的“default”表示什么呢?
ps: Date類型內(nèi)部重寫了@@toPrimitive()方法,將“default”設(shè)置為“string”,而其他內(nèi)置的對(duì)象都將“default”設(shè)置為“number” 。
Date.prototype[@@toPrimitive]:
2.3 示例
1) String + String
說明:進(jìn)行字符串連接操作
'a' + 'b'; // = 'ab'
'1' + '2'; // = '12'
2) Number + Number
說明:進(jìn)行算數(shù)的加法操作
1 + 2; // = 3
3) Number + String or String + Number
說明:Number類型的值先進(jìn)行ToString()轉(zhuǎn)換,隨后再與另一個(gè)String類型的值進(jìn)行拼接操作
1 + '0'; // = '10'
1 + '0a'; // = '10a'
'1' + 2; // = 12
4) Array + String or Array + Number
說明:Array類型進(jìn)行ToPrimitive()轉(zhuǎn)換時(shí),先執(zhí)行valueOf(),因其返回一個(gè)object類型的值,所以又執(zhí)行了toString()方法。
var tmpList = ['a', 'b', 'c'];
tmpList.valueOf(); // = ["a", "b", "c"]? 輸出自身
tmpList.toString(); // a,b,c
// 1.Array + String
tmpList + 'd'; // = a,b,cd
// 2.重寫Array的valueOf()方法,使其返回一個(gè)非object
Array.prototype.valueOf = function (e) {
return this.join('-');
}
tmpList + 'd'; // = a-b-cd
5) Date + String or Date + Number
說明:上面已經(jīng)講過,Date類型重寫了ToPrimitive(),所以先調(diào)用toString(),若返回值為object,再調(diào)用valueOf()。
var dt = new Date();
dt.valueOf(); // = 1503501745901
dt.toString(); // Wed Aug 23 2017 23:22:25 GMT+0800 (中國標(biāo)準(zhǔn)時(shí)間)
// 1.Date + String : dt直接使用了dt.toString()方法
dt + 'd'; // = Wed Aug 23 2017 23:22:25 GMT+0800 (中國標(biāo)準(zhǔn)時(shí)間)d
// 2.重寫Date的toString()方法,使其返回一個(gè)object的值
Date.prototype.toString = function (e) {
return { year: this.getFullYear() };
}
// 略過了 dt.toString(),調(diào)用了 dt.valueOf()
dt + 'd'; // = 1503501745901d
End
不是的,有個(gè)口訣我告訴你啊
單雙加
'"+name+"'
這個(gè)是用于字符串和變量的拼接使用的
var?name?=?"yugi";
var?str?=?"select?name?from?table?where?name='"+name+"'";
形同:
select?name?from?table?where?name='yugi'
單百雙加
'%"+name+"%'
這個(gè)是后臺(tái)語言用于查詢數(shù)據(jù)庫的語句,like,模糊查詢
String?name?=?"yugi";
String?sql?=?"select?name?from?table?where?name?like?'%"+name+"%'";
形同:
select?name?from?table?where?name?like?'%yugi%'
前后2個(gè)雙引號(hào)其實(shí)是和別的雙引號(hào)配對(duì)的,里面的單引號(hào)就是包裹這個(gè)變量的