js代码转换(帮我转换这段js代码成简体)
各位老铁们,大家好,今天由我来为大家分享js代码转换,以及帮我转换这段js代码成简体的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!
JS的类型怎么转换
这次给大家带来JS的类型怎么转换,JS类型转换的注意事项有哪些,下面就是实战案例,一起来看一下。
隐式类型转换
在 JavaScript中,当我们进行比较操作或者加减乘除四则运算操作时,常常会触发 JavaScript的隐式类型转换机制;而这部分也往往是令人迷惑的地方。譬如浏览器中的 console.log操作常常会将任何值都转化为字符串然后展示,而数学运算则会首先将值转化为数值类型(除了 Date类型对象)然后进行操作。
我们首先来看几组典型的 JavaScript中运算符操作结果,希望阅读完本部分之后能够对每一个条目都能进行合理解释:
//比较
[]==![]// true
NaN!== NaN// true
1== true// true
2== true// false
"2"== true// flase
null> 0// false
null< 0// false
null== 0// false
null>= 0// true
//加法
true+ 1// 1
undefined+ 1// NaN
let obj={};
{}+ 1// 1,这里的{}被当成了代码块
{ 1+ 1}+ 1// 1
obj+ 1// [object Object]1
{}+{}// Chrome上显示"[object Object][object Object]",Firefox显示 NaN
[]+{}// [object Object]
[]+ a// [object Object]
+ []//等价于+""=> 0
{}+ []// 0
a+ []// [object Object]
[2,3]+ [1,2]//'2,31,2'
[2]+ 1//'21'
[2]+(-1)//"2-1"
//减法或其他操作,无法进行字符串连接,因此在错误的字符串格式下返回 NaN
[2]- 1// 1
[2,3]- 1// NaN
{}- 1//-1
原始类型间转换
JavaScript中我们常说的原始类型包括了数值类型、字符串类型、布尔类型与空类型这几种;而我们常用的原始类型之间的转换函数就是 String、Number与 Boolean:
// String
let value= true;
console.log(typeof value);// boolean
value= String(value);// now value is a string"true"
console.log(typeof value);// string
// Number
let str="123";
console.log(typeof str);// string
let num= Number(str);// becomes a number 123
console.log(typeof num);// number
let age= Number("an arbitrary string instead of a number");
console.log(age);// NaN, conversion failed
// Boolean
console.log( Boolean(1));// true
console.log( Boolean(0));// false
console.log( Boolean("hello"));// true
console.log( Boolean(""));// false
最终,我们可以得到如下的 JavaScript原始类型转换表(包括复合类型向原始类型转换的范例):
原始值
转化为数值类型
转化为字符串类型
转化为 Boolean类型
false
0
"false"
false
true
1
"true"
true
0
0
"0"
false
1
1
"1"
true
"0"
0
"0"
true
"1"
1
"1"
true
NaN
NaN
"NaN"
false
Infinity
Infinity
"Infinity"
true
-Infinity
-Infinity
"-Infinity"
true
""
0
""
false
"20"
20
"20"
true
"twenty"
NaN
"twenty"
true
[ ]
0
""
true
[20]
20
"20"
true
[10,20]
NaN
"10,20"
true
["twenty"]
NaN
"twenty"
true
["ten","twenty"]
NaN
"ten,twenty"
true
function(){}
NaN
"function(){}"
true
{}
NaN
"[object Object]"
true
null
0
"null"
false
undefined
NaN
"undefined"
false
ToPrimitive
在比较运算与加法运算中,都会涉及到将运算符两侧的操作对象转化为原始对象的步骤;而 JavaScript中这种转化实际上都是由 ToPrimitive函数执行的。实际上,当某个对象出现在了需要原始类型才能进行操作的上下文时,JavaScript会自动调用 ToPrimitive函数将对象转化为原始类型;譬如上文介绍的 alert函数、数学运算符、作为对象的键都是典型场景,该函数的签名如下:
ToPrimitive(input, PreferredType?)
为了更好地理解其工作原理,我们可以用 JavaScript进行简单地实现:
var ToPrimitive= function(obj,preferredType){
var APIs={
typeOf: function(obj){
return Object.prototype.toString.call(obj).slice(8,-1);
},
isPrimitive: function(obj){
var _this= this,
types= ['Null','Undefined','String','Boolean','Number'];
return types.indexOf(_this.typeOf(obj))!==-1;
}
};
//如果 obj本身已经是原始对象,则直接返回
if(APIs.isPrimitive(obj)){return obj;}
//对于 Date类型,会优先使用其 toString方法;否则优先使用 valueOf方法
preferredType=(preferredType==='String'|| APIs.typeOf(obj)==='Date')?'String':'Number';
if(preferredType==='Number'){
if(APIs.isPrimitive(obj.valueOf())){ return obj.valueOf()};
if(APIs.isPrimitive(obj.toString())){ return obj.toString()};
}else{
if(APIs.isPrimitive(obj.toString())){ return obj.toString()};
if(APIs.isPrimitive(obj.valueOf())){ return obj.valueOf()};
}
throw new TypeError('TypeError');
}
我们可以简单覆写某个对象的 valueOf方法,即可以发现其运算结果发生了变化:
let obj={
valueOf:()=>{
return 0;
}
}
obj+ 1// 1
如果我们强制将某个对象的 valueOf与 toString方法都覆写为返回值为对象的方法,则会直接抛出异常。
obj={
valueOf: function(){
console.log("valueOf");
return{};// not a primitive
},
toString: function(){
console.log("toString");
return{};// not a primitive
}
}
obj+ 1
// error
Uncaught TypeError: Cannot convert object to primitive value
at<anonymous>:1:5
值得一提的是对于数值类型的 valueOf()函数的调用结果仍为数组,因此数组类型的隐式类型转换结果是字符串。而在 ES6中引入 Symbol类型之后,JavaScript会优先调用对象的 [Symbol.toPrimitive]方法来将该对象转化为原始类型,那么方法的调用顺序就变为了:
当 obj[Symbol.toPrimitive](preferredType)方法存在时,优先调用该方法;
如果 preferredType参数为 String,则依次尝试 obj.toString()与 obj.valueOf();如果 preferredType参数为 Number或者默认值,则依次尝试 obj.valueOf()与 obj.toString()。
而 [Symbol.toPrimitive]方法的签名为:
obj[Symbol.toPrimitive]= function(hint){
// return a primitive value
// hint= one of"string","number","default"
}
我们同样可以通过覆写该方法来修改对象的运算表现:
user={
name:"John",
money: 1000,
[Symbol.toPrimitive](hint){
console.log(`hint:${hint}`);
return hint=="string"? `{name:"${this.name}"}`: this.money;
}
};
// conversions demo:
console.log(user);// hint: string->{name:"John"}
console.log(+user);// hint: number-> 1000
console.log(user+ 500);// hint: default-> 1500
比较运算
JavaScript为我们提供了严格比较与类型转换比较两种模式,严格比较(===)只会在操作符两侧的操作对象类型一致,并且内容一致时才会返回为 true,否则返回 false。而更为广泛使用的==操作符则会首先将操作对象转化为相同类型,再进行比较。对于<=等运算,则会首先转化为原始对象(Primitives),然后再进行对比。
标准的相等性操作符(==与!=)使用了Abstract Equality Comparison Algorithm来比较操作符两侧的操作对象(x== y),该算法流程要点提取如下:
如果 x或 y中有一个为 NaN,则返回 false;
如果 x与 y皆为 null或 undefined中的一种类型,则返回 true(null== undefined// true);否则返回 false(null== 0// false);如果 x,y类型不一致,且 x,y为 String、Number、Boolean中的某一类型,则将 x,y使用 toNumber函数转化为 Number类型再进行比较;如果 x,y中有一个为 Object,则首先使用 ToPrimitive函数将其转化为原始类型,再进行比较。
我们再来回顾下文首提出的 []==![]这个比较运算,首先 []为对象,则调用 ToPrimitive函数将其转化为字符串"";对于右侧的![],首先会进行显式类型转换,将其转化为 false。然后在比较运算中,会将运算符两侧的运算对象都转化为数值类型,即都转化为了 0,因此最终的比较结果为 true。在上文中还介绍了 null>= 0为 true的这种比较结果,在 ECMAScript中还规定,如果<为 false,则>=为 true。
加法运算
对于加法运算而言,JavaScript首先会将操作符两侧的对象转换为 Primitive类型;然后当适当的隐式类型转换能得出有意义的值的前提下,JavaScript会先进行隐式类型转换,再进行运算。譬如 value1+ value2这个表达式,首先会调用 ToPrimitive函数将两个操作数转化为原始类型:
prim1:= ToPrimitive(value1)
prim2:= ToPrimitive(value2)
这里将会优先调用除了 Date类型之外对象的 valueOf方法,而因为数组的 valueOf方法的返回值仍为数组类型,则会返回其字符串表示。而经过转换之后的 prim1与 prim2中的任一个为字符串,则会优先进行字符串连接;否则进行加法计算。
相信看了本文案例你已经掌握了方法,更多精彩请关注Gxl网其它相关文章!
推荐阅读:
“js”怎么转换大小写
toUpperCase()
代码:
<script type="text/javascript">
var a="adsadf";
var b=a.toUpperCase();
alert(b);
</script>
JavaScript脚本语言特点:
1、脚本语言。JavaScript是一种解释型的脚本语言,C、C++等语言先编译后执行,而JavaScript是在程序的运行过程中逐行进行解释。
2、基于对象。JavaScript是一种基于对象的脚本语言,它不仅可以创建对象,也能使用现有的对象。
3、简单。JavaScript语言中采用的是弱类型的变量类型,对使用的数据类型未做出严格的要求,是基于Java基本语句和控制的脚本语言,其设计简单紧凑。
帮我转换这段js代码成简体
var owner="123456";var sf_mess_cfg={theme:"luxury",color:"red",title:"客户购买意向咨询",send:"发送留言",copyright:"千博提供技术支持",mbpos:"RD"};var sf_mess_msg={emailErr:'请填写正确的电子信箱地址!',messErr:'您的留言字数已超过限制,请保留在1000个字以内!',prefix:'请填写',success:'我们已经收到您的留言,稍候会与您联系。谢谢!',fail:'您的留言发送失败,请重试。'};var sf_mess_cols= [{type:"textarea",mbtype:"message",tip:"留言内容",innertip:"客服不在线时,请给我们留言。我们会及时联系您!",idname:"content"},{type:"text",mbtype:"tel",tip:"手机号码",innertip:"请输入您的手机号码",idname:"phone"},{type:"text",mbtype:"email",tip:"电子邮箱",innertip:"请输入您的电子邮箱",idname:"email"},{type:"text",mbtype:"address",tip:"联系地址",innertip:"请输入您的联系地址",idname:"addr"}];document.write('<script src="scripts/entry.js" type="text/javascript"></script>');
用下面的代码存为html格式运行转换就行了。。。
<html>
<head>
<title>transform between native and ascii</title>
</head>
<script type="text/javascript"><!--
var keyStr="ABCDEFGHIJKLMNOP"+
"QRSTUVWXYZabcdef"+
"ghijklmnopqrstuv"+
"wxyz0123456789+/"+
"=";
function native2ascii(strNative){
var output="";
for(var i=0; i<strNative.length; i++){
var c= strNative.charAt(i);
var cc= strNative.charCodeAt(i);
if(cc> 0xff)
output+="\\u"+ toHex(cc>> 8)+ toHex(cc& 0xff);
else
output+= c;
}
return output;
}
var hexChars="0123456789ABCDEF";
function toHex(n){
var nH=(n>> 4)& 0x0f;
var nL= n& 0x0f;
return hexChars.charAt(nH)+ hexChars.charAt(nL);
}
function ascii2native(strAscii){
var output="";
var posFrom= 0;
var posTo= strAscii.indexOf("\\u", posFrom);
while(posTo>= 0){
output+= strAscii.substring(posFrom, posTo);
output+= toChar(strAscii.substr(posTo, 6));
posFrom= posTo+ 6;
posTo= strAscii.indexOf("\\u", posFrom);
}
output+= strAscii.substr(posFrom);
return output;
}
function toChar(str){
if(str.substr(0, 2)!="\\u") return str;
var code= 0;
for(var i=2; i<str.length; i++){
var cc= str.charCodeAt(i);
if(cc>= 0x30&& cc<= 0x39)
cc= cc- 0x30;
else if(cc>= 0x41&& cc<= 0x5A)
cc= cc- 0x41+ 10;
else if(cc>= 0x61&& cc<= 0x7A)
cc= cc- 0x61+ 10;
code<<= 4;
code+= cc;
}
if(code< 0xff) return str;
return String.fromCharCode(code);
}
//--></script>
<body style="font-family:宋体">
<form name="theForm">
Type in the message here, and click a command button:
<br/>
<textarea name="theText" cols="80" rows="20" wrap="off"></textarea>
<br/>
<input type="button" value="native to ascii"
onClick="document.theForm.theText.value=native2ascii(document.theForm.theText.value);">
<input type="button" value="ascii to native"
onClick="document.theForm.theText.value=ascii2native(document.theForm.theText.value);">
</form>
</body>
</html>
文章到此结束,希望我们对于js代码转换的问题能够给您带来一些启发和解决方案。如果您需要更多信息或者有其他问题,请随时联系我们。