javascript 一 03 数据类型的转换

强制转换

Number() String() Boolean()

Number()

使用 Number 函数,可以将任意类型的值转化成数值。

Number(324); // 324
Number("324"); // 324
Number("324abc"); // NaN
Number(""); // 0
--Number(true); // 1
Number(false); // 0
--Number(undefined); // NaN
Number(null); // 0

Number 方法的参数是对象时,将返回 NaN,除非是包含单个数值的数组。

Number({ a: 1 }); // NaN
Number([1, 2, 3]); // NaN
Number([5]); // 5

简析过程

var obj = { x: 1 };
Number(obj); // NaN
// 等同于
if (typeof obj.valueOf() === "object") {
  Number(obj.toString());
} else {
  Number(obj.valueOf());
}

首先调用 obj.valueOf 方法, 结果返回对象本身;于是,继续调用 obj.toString 方法,这时返回字符串[object Object],对这个字符串使用 Number 函数,得到 NaN。 默认情况下,对象的 valueOf 方法返回对象本身,所以一般总是会调用 toString 方法,而 toString 方法返回对象的类型字符串(比如[object Object])

Number({}); // NaN

String()

String 函数可以将任意类型的值转化成字符串

String(123); // "123"
String("abc"); // "abc"
String(true); // "true"
String(undefined); // "undefined"
String(null); // "null"
// 对象
String({ a: 1 }); // "[object Object]"
String([1, 2, 3]); // "1,2,3"

简析过程

String({ a: 1 });
// "[object Object]"

// 等同于
String({ a: 1 }.toString());
// "[object Object]"
  • 01 先调用对象自身的 toString 方法。如果返回原始类型的值,则对该值使用 String 函数,不再进行以下步骤。

  • 02 如果 toString 方法返回的是对象,再调用原对象的 valueOf 方法。如果 valueOf 方法返回原始类型的值,则对该值使用 String 函数,不再进行以下步骤。

  • 03 如果 valueOf 方法返回的是对象,就报错。

Boolean()

Boolean()函数可以将任意类型的值转为布尔值

Boolean(undefined); // false
Boolean(null); // false
Boolean(0); // false
Boolean(NaN); // false
Boolean(""); // false
--Boolean(true); // true
Boolean(false); // false
--Boolean({}); // true
Boolean([]); // true
Boolean(new Boolean(false)); // true

自动转换

自动转换为布尔值

if (!undefined && !null && !0 && !NaN && !"") {
  console.log("true");
} // true

// 写法一
expression ? true : false;

// 写法二
!!expression;

自动转换为字符串

"5" + 1; // '51'
"5" + true; // "5true"
"5" + false; // "5false"
"5" + {}; // "5[object Object]"
"5" + []; // "5"
"5" + function () {}; // "5function (){}"
"5" + undefined; // "5undefined"
"5" + null; // "5null"

自动转换为数值

"5" - "2"; // 3
"5" * "2"; // 10
true - 1; // 0
false - 1; // -1
"1" - 1; // 0
"5" * []; // 0
false / "5"; // 0
"abc" - 1; // NaN
null + 1; // 1
undefined + 1; // NaN

方法转换

字符串与数组的转化

split() 方法功能:将字符串按某个字符切割成若干个字符串,并以数组形式返回

var str = "数组1,数组2,数组3,数组4,数组5";
var arry = str.split(",");
console.log(arry);
//["数组1", "数组2", "数组3", "数组4", "数组5"]

join() 方法功能:将数组元素用某个字符连接成字符串

var arry = ["数组1", "数组2", "数组3", "数组4", "数组5"];
var str = arry.join("-");
console.log(str); //数组1,数组2,数组3,数组4,数组5

数组与对象的转化

var arry = ["数组1", "数组2", "数组3", "数组4", "数组5"];
console.log(Object.assign({}, arry));
//["数组1", "数组2", "数组3", "数组4", "数组5"]

复杂的数组可以用遍历的方法

var formArr = [
  {
    name: "数组1",
    value: "11111",
  },
  {
    name: "数组2",
    value: "22222",
  },
  {
    name: "数组3",
    value: "33333",
  },
  {
    name: "数组4",
    value: "44444",
  },
];
var obj = {};
formArr.map(function (e, item) {
  obj[e.name] = e.value;
});
console.log(obj);

对象转数组

var obj = {
  one: "11111",
  two: "22222",
  three: "33333",
  four: "44444",
};
var arr = [];
for (let i in obj) {
  let o = {};
  // console.log(i,obj[i])
  o[i] = obj[i];
  arr.push(o);
}
console.log(arr);

JSON 对象和 js 对象的相互转换

// json 对象
 {
 "name":"张三",
 "age":"18",
 "address":"张丑丑呀"
 }
 // js 对象
var formData={
 name:'张三',
 age:18,
 address:'张丑丑呀'
 } ;

JSON.stringify()
JSON.stringify() 方法用于将 JavaScript 值转换为 JSON 字符串。

var formData = {
  name: "张三",
  age: 18,
  address: "张丑丑呀",
};
console.log(JSON.stringify(formData, ["name", "address", "age"]));
// {"name":"张三","address":"张丑丑呀","age":18}
console.log(JSON.stringify(formData, null, 4));
//     {
//     "name": "张三",
//     "age": 18,
//     "address": "张丑丑呀"
//     }

JSON.parse()
JSON.parse() 方法用于将一个 JSON 字符串转换为对象。

var str = '{"name":"张三","age":"18","address":"张丑丑呀"}';
console.log(JSON.parse(str));

json 互转及取值 [搬运]

json类型的字符串转换为json对象及取值

var jsonString = '{"bar":"property","baz":3}';
var jsObject = JSON.parse(jsonString);    //转换为json对象
console.log(jsObject.bar);    //取json中的值

json对象转为json类型的字符串

var jsonString = '{"bar":"property","baz":3}';
var jsObject = JSON.parse(jsonString); //转换为json对象
alert(jsObject.bar); //取json中的值
var st = JSON.stringify(jsObject); //转换为json类型的字符串  

json数组类型字符串取值

var jsonStr = '[{"id":"01","open":false,"pId":"0","name":"A部门"},{"id":"01","open":false,"pId":"0","name":"A部门"},{"id":"011","open":false,"pId":"01","name":"A部门"}]';
var jsonObj =  JSON.parse(jsonStr);//转换为json对象
for(var i=0;i<jsonObj.length;i++){
        alert(jsonObj[i].id);  //取json中的值
}
console.log(jsonObj)
var jsonStr1 = JSON.stringify(jsonObj)
console.log(jsonStr1+"jsonStr1")
(0)

相关推荐