string,number类型转换的快捷方法

本文介绍了JavaScript中常见的类型转换方法,包括字符串和数字类型的转换、布尔类型转换、使用===与==的区别、检测window对象、||与&&的用法、setTimeout的差异、数值检测、空对象检测及对象类型检测。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


string,number类型转换的快捷方法

// @param s为字符串,n为数字 function fn(obj){ //转换为String类型 var s = obj +"";  //转换为number类型 var n = +obj;
}

分享一个面试例子:

//加会将其后面自动转换成字符串 "64"+4="644" //减会将其自动转换成数字 "64"-4=60

 

2.bool类型转换

!!obj,将其强制转换为bool类型

alert(!!0) //结果为false alert(!!"33dd") //结果为true

!obj,取相反的bool类型

alert(!0) //结果为true alert(!"222333") //结果为false

3.=== 与 ==区别

=== 是严格相等,不会进行类型转换,而 == 是不严格相等,会进行类型转换。

有些js的书中,建议开发人员永远不要用 == 或者 != 。

但是jquery源码中,有用到“==”或者“!=”的情况 —— 判断 undefined 和 null 的时候(undefined == null为true)。

//这里的判断,将obj是null,obj是undefined都排除在外了 if(obj != null){
}

4.检测obj是否为window对象

//null == window.null为true function isWindow(obj){ return obj != null && obj == window.obj;
}

5.|| 与 && 用法技巧

//例 var aa=5; name = aa || {} ; alert(name) 则name为55 this.name = name || {}  //如果name值存在,则值为name,反之为{} //例 var aa=5; name = aa && {} ; alert(name) 则name为{},
       因为aa为5,不为0则为真 this.name = bool && [] //如果bool为true,则值为[],反之则为bool

经典实例:

( window.foo || ( window.foo = "bar" ) ); 
                alert(window.foo); //弹出  bar
//  为什么最后的结果是bar呢,其实可以看成是   undefined || bar  出来的结果肯定是bar

6.setTimeout(fn,0)与setTimeout(fn)区别(此处有问题,没有考虑单线程的问题,请比较了解的大神,帮忙指点

setTimeout(fn,0)与setTimeout(fn)都是延迟执行,但是setTimeout(fn)比setTimeout(fn,0)延迟时间还要长,例


 function fn(){ var data = new Date(); for(var i=0;i<=1000;i++){ if(i==1000){
                    console.log("fn="+data.getTime());
                }
            }
        }
        function fn1(){ var data = new Date(); for(var i=0;i<=1000;i++){ if(i==1000){
                    console.log("fn1="+data.getTime());
                }
            }
        }
        setTimeout(fn,0),
        setTimeout(fn1);

结果:

7.判断是否为数值

function isNumeric(obj){ return !isNaN(parseFloat(obj)) && isFinite(obj);
}

8.判断是否为空对象


function isEmptyObject(){ var name; //遍历不是空对象返回 for (name in obj) { return false;
    } return true;
}

9.检测对象类型

检 测obj对象类型,返回类型,通过Object.prototype.toString()来判断类型,但是ie低版本兼容性有问题,

因此采用 {}.toString来监测,返回为[object Array],[object Object],[object Function]


// 类型判断 function isType(type){ return function(o){
   return Object.prototype.toString.call(o) === '[object ' + type + ']';
    }
} var isString = isType(“String”); var isObject = isType("Object"); var isArray = isType("Array");
 
isString("I'm Barret Lee.");
isArray([1,2,3]);
isObject({});

10.jquery里的去除空格trim妙用



//相当于if (String.prototype.trim && “\uFEFF\xA0″.trim() !== “”)
高级的浏览器已经支持原生的String的trim方法,但是pFan还为了避免它没法解析全角空白,
所以加多了一个判断:”\uFEFF\xA0″.trim() !== “” vart core_version = "1.0",core_trim = core_version.trim;            
function trim(){
    core_trim && !core_trim.call("\uFEFF\xA0") ? function (text) { return text == null ? "" :
              core_trim.call(text);
 //这里按我的理解应该为" ".trim.call(text),有点不明白转换为"1.1.0".trim.call(text)  } : // 高级的浏览器已经支持原生的String的trim方法,如果浏览器不支持则采用  function (text) { var whitespace = "[\\x20\\t\\r\\n\\f]",
             rtrim = new RegExp("^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g");  return text == null ? "" :
                            (text + "").replace(rtrim, "");
                    }, //nodeName函数是获取dom节点的节点名字或者判断其名字跟传入参数是否匹配   nodeName: function(elem,name){ //IE下,DOM节点的nodeName是大写的,例如DIV  return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
                }
}

11.jquery中检测数组或者类数组中是否含存在传入的值


/**
    检查数组中是否存在传入的值,如果存在就返回值所在的位置,如果不存在就返回-1。
    *elem 规定需检索的值。
    *arr 数组
    *i 可选的整数参数。规定在数组中开始检索的位置。它的合法取值是 0 到 arr.length - 1。
    如省略该参数,则将从数组首元素开始检索。 */ function inArray(elem, arr, i){ var len; if (arr) { //如果浏览器支持Array拥有indexOf方法 if ([].indexOf) { return [].indexOf.call(arr, elem, i);
        }
        len = arr.length; //当i为负数的时候,从数组后边len+i的位置开始索引
      //理解这个分成两个部分i = i ? (i < 0 ? Math.max(0, len + i) : i) : 0;,i=i为true
        ,执行(i < 0 ? Math.max(0, len + i) : i),反正执行i=0  i = i ? i < 0 ? Math.max(0, len + i) : i : 0; for (; i < len; i++) { //双重检测防止类似这样的数组ar=[];ar[1]=1;ar[0]=undefined;0 in ar =false;a[0]===undefined; // 0 in arr  => arr[0]是否存在  'nme' in arr => arr['nme']是否存在  if (i in arr && arr[i] === elem) { return i;
            }
        }
    } return -1;
}

### C++ 中实现进制转换的快捷代码 以下是基于已有引用内容以及专业知识所提供的 C++ 实现进制转换的快捷代码示例。 #### 使用 `stringstream` 的方式 通过标准库中的 `std::stringstream` 和 `iomanip` 可以轻松完成十进制与其他进制之间的相互转换。这种方法简单高效,适合快速开发场景。 ```cpp #include <iostream> #include <sstream> using namespace std; string decimalToBinary(int num) { stringstream ss; ss << bitset<32>(num); // 将整数转化为二进制形式 return ss.str(); } int binaryToDecimal(const string& binStr) { return stoi(binStr, nullptr, 2); } string decimalToHexadecimal(int num) { stringstream ss; ss << hex << uppercase << num; // 转化为大写十六进制 return ss.str(); } int hexadecimalToDecimal(const string& hexStr) { return stoi(hexStr, nullptr, 16); } int main() { int decNum = 255; cout << "Decimal to Binary: " << decimalToBinary(decNum) << endl; // 输出二进制表示 [^1] cout << "Binary to Decimal: " << binaryToDecimal("11111111") << endl; // 输入二进制字符串并输出对应的十进制值 cout << "Decimal to Hexadecimal: " << decimalToHexadecimal(decNum) << endl; // 输出十六进制表示 [^1] cout << "Hexadecimal to Decimal: " << hexadecimalToDecimal("FF") << endl; // 输入十六进制字符串并输出对应的十进制值 return 0; } ``` #### 手动实现的方式 如果不想依赖于标准库的功能,可以手动编写逻辑来处理进制间的转换。这种方式更加灵活,适用于特定需求下的优化。 ##### 十进制转任意进制 ```cpp #include <iostream> #include <vector> #include <algorithm> using namespace std; string convertDecimalToBase(int number, int base) { vector<char> digits{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'}; string result = ""; bool isNegative = (number < 0); if (isNegative && base == 10) { number *= -1; } do { result += digits[number % base]; number /= base; } while (number != 0); if (isNegative && base == 10) { result += '-'; } reverse(result.begin(), result.end()); return result; } int main() { int number = 255; int targetBase = 16; cout << "Decimal (" << number << ") -> Base " << targetBase << ": " << convertDecimalToBase(number, targetBase) << endl; // 自定义函数用于将十进制转换为目标进制 [^2] return 0; } ``` ##### 任意进制转十进制 ```cpp #include <iostream> #include <cmath> #include <cctype> using namespace std; int convertBaseToDecimal(string strNumber, int sourceBase) { int result = 0; int power = 1; for (int i = strNumber.size()-1 ; i >= 0 ; --i){ char c = toupper(strNumber[i]); int digitValue = (isdigit(c)) ? (c-'0') : ((c >= 'A' && c <= 'Z') ? (c - 'A' + 10) : -1); if(digitValue >=sourceBase || digitValue <0 ){ throw invalid_argument("Invalid character found"); } result +=digitValue*power ; power *=sourceBase ; } return result; } int main(){ try{ string input="FF"; int sourceBase=16 ; cout<<input<<"(base "<<sourceBase<<")-> Decimal:"<<convertBaseToDecimal(input ,sourceBase)<<endl; // 将给定进制的数值转换成十进制 [^3] } catch(exception &e){ cerr<<e.what()<<'\n'; } return 0; } ``` 以上提供了两种不同的解决方案:一种利用了 C++ 标准库的能力;另一种则是完全自定义的手工实现版本。两者各有优劣,在实际应用中可以根据具体情况进行选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值