JavaScript 基本数据类型 与类型检测

一、【JavaScript 基本数据类型】

JavaScript 拥有动态类型。这意味着相同的变量可用作不同的类型

"string"   "number"   "object"   "boolean"   "function"   "undefined"

<1> string类型

属性:

str.length

var str = "123,ABC,900,rgy,rrrr";
console.log(str.length);//20
var str = "123,ABC,900,冉光宇,rrrr";
console.log(str.length);//20

tip:

从实验结果可以看出来不管是英文字符还是汉字字符,它们在length中表现一样,

并没有什么区别,有几个字符就占几个位置,这里并不区分多字节字符,

在这里它们被一视同仁

方法:

转换大小写:

str.toLowerCase();// 返回一个字符串,该字符串中的字母被转换成小写

str.toUpperCase();// 返回一个字符串,该字符串中的字母被转换成大写

var str = "123,ABC,900,冉光宇,rrrr";
console.log(str.toLowerCase());// 123,abc,900,冉光宇,rrrr
console.log(str.toUpperCase());// 123,ABC,900,冉光宇,RRRR

索引字符(字符串):

str.charCodeAt(num);// 返回一个整数,代表指定位置字符的Unicode编码

str.fromCharCode(num2,num2,num3);// 从一些Unicode字符串中返回一个字符串

str.charAt(num);// 指定索引位置处的字符,如果超出有效范围的索引值返回空字符串。

str.indexOf(flag); // 返回String对象内第一次出现子字符串位置

str.lastIndexOf(flag);// 返回String对象内最后一次出现子字符串位置

var str = "ABC";
console.log(str.charCodeAt(1));// 66 (index == 1的字符B的Unicode编码为66)
console.log(String.fromCharCode(65,66,67));// ABC
console.log(str.charAt(5));// 空
console.log(str.charAt(1));// B
var str = "abcba";
console.log(str.indexOf("b"));// 1
console.log(str.lastIndexOf("b"));// 3
console.log(str.indexOf("z"));// -1
console.log(str.lastIndexOf("z"));// -1
console.log(str.indexOf("b",2));// 3
console.log(str.lastIndexOf("b",4));// 3

tip:

1.indexOf()与 lastIndexOf()若是没有匹配到子字符串,则返回-1

2.indexOf("b",2) 表示由index==2的位置开始,从左向右进行查找

3.lastIndexOf("b",4) 表示由index==4的位置开始,从右向左进行查找

截取字符串:

str.substring(start,end);// 返回位于String对象中指定位置的子字符串

str.substr(start,length);// 返回一个从指定位置开始的指定长度的子字符串

str.slice(start,end);// 返回位于String对象中指定位置的子字符串

var str = "0123456";
var arr = str.substring(1,4);
console.log(str);// 0123456
console.log(arr);// 123
console.log(str.substring(4,1));// 123
console.log(str.substring(1));// 123456
console.log(str.substring(-2));// 0123456

tip:

1.可以看出 substring(1,4)与 substring(4,1)等价,都是截取index == 1 到 index == 4 之间的字符串

2.同时还可以看出它对原数组并无影响

3.参数若为负数,则返回整个完整字符串

////

var str = "0123456";
var arr = str.substr(1,4);
console.log(str);// 0123456
console.log(arr);// 1234

tip:

1.substr(1,4) 表示从index == 1的位置开始截取,向后截取4个字符

2.还可以看出它对原数组并无影响

////

var str = "0123456";
var arr = str.slice(1,4);
console.log(str);// 0123456
console.log(arr);// 123
console.log(str.slice(4,1));// 空,不支持这种方式
console.log(str.slice(1));// 123456
console.log(str.slice(-5));// 23456
console.log(str.slice(-5,-1));// 2345

tip:

1.可以看出它对原数组并无影响

2.不支持str.slice(4,1),前面的index大于后面的index

3.支持参数为负数

正则表达式:

match: str.match(reg); // 返回数组

search: str.search(reg); // 返回number

replace: str.replace(reg); // 返回字符串

split: str.split(reg); // 返回数组

var str = "123,ABC,900,rgy,rrrgyr";
console.log(str.match(/rgy/));// ["rgy", index: 12, input: "123,ABC,900,rgy,rrrgyr"]
console.log(str.match(/rgy/g));// ["rgy", "rgy"]

tip: 默认匹配第一个,加了标志"g"表示全局匹配

var str = "123,ABC,900,rgy,rrrgyr";
console.log(str.search(/rgy/));// 12

tip: 默认匹配第一个,返回index

var str = "123,ABC,900,rgy,rrrgyr";
console.log(str.replace(/rgy/, "kkk"));// 123,ABC,900,kkk,rrrgyr
console.log(str.replace(/rgy/g, "kkk"));// 123,ABC,900,kkk,rrkkkr
console.log(str.replace(/(\d+),(\w+)/g, "$2,$1"));// ABC,123,rgy,900,rrrgyr

var str = "123,ABC,900,rgy,rrrgyr";
var arr = str.split(",");// ["123", "ABC", "900", "rgy", "rrrgyr"]
var arr = str.split(/,/);// ["123", "ABC", "900", "rgy", "rrrgyr"]
tip: split()方法中参数可以为正则表达式,也可以为其他字符串

<2> number类型

Number.MAX_VALUE // 1.7976931348623157e+308

Number.MIN_VALUE // 5e-324

Number.NEGATIVE_INFINITY // Infinity(无穷大)

Number.POSITIVE_INFINITY // -Infinity(负无穷大)

number转换成string:

console.log(Math.ceil("1000.3"));// 1001(向上取整)

console.log(Math.floor("1000.3"));// 1000 (向下取整)

console.log(Math.round("1000.3"));// 1000(四舍五入)

console.log(parseInt("1000.3"));// 1000

console.log(parseFloat("1000.3"));// 1000.3

parseInt()和 parseFloat():

parseInt(str [, radix]);

parseFloat(str [, radix]);

返回的数都为10进制

radix为可选项,表示进制,该值介于 2 ~ 36 之间,表示以什么进制来进行解析

当参数radix的值为0,或没有设置该参数时,parseInt()会根据string来判断数字的基数。

console.log(parseInt("1011", 2)); // 11
console.log(parseInt("18", 10));// 18

parseFloat()用法类似

<3> object类型

属性:

constructor

prototype

方法:

hasOwnProperty(); //用来判断,一个属性是不是本地属性

isPrototypeOf();//用来判断,某个prototype对象和某个实例之间的关系。

toString();

toLocaleString();

valueOf();

function Cat(name,color){
	this.name = name;
	this.color = color;
}

Cat.prototype.type = "猫科动物";
Cat.prototype.eat = function(){
	alert("吃老鼠");
}

var cat1 = new Cat("大毛","黄色");
var cat2 = new Cat("二毛","黑色");

alert(Cat.prototype.isPrototypeOf(cat1));//true
alert(Cat.prototype.isPrototypeOf(cat2));//true

alert(cat1.hasOwnProperty("name"));//true
alert(cat1.hasOwnProperty("type"));//false

<4> boolean类型

boolean的隐式转换规则:

1.特殊值undefined和null变成false

2.数字0和NaN变成false

3.空字符串变成false

4.所有其他值都变成true

<5> function类型

在js中定义函数的方式有两种:一种是函数声明,另一种是函数表达式

函数声明:

function functionName(arg0, arg1, arg2) {}

函数表达式:

var functionName = function(arg0, arg1, arg2){};

tip:

函数声明时,它有一个重要的特性就是函数声明提升,在执行代码之前会先读取函数声明

因此,可以把函数声明放在调用它的语句后面。

例如:

say();
function say(){
	alert("hello world!");
}

JS中没有函数重载的概念,函数调用的时候,会以就近原则来调用

<6> undefined类型

undefined与null的关系:

console.log(undefined == null);// true

console.log(undefined === null);// false

了解更多undefined与null:

http://www.ruanyifeng.com/blog/2014/03/undefined-vs-null.html

判断undefined类型:

if (typeof(value) == "undefined") {

alert("undefined");

}

//////////////////////

二、【数据类型检测】

引子:

var nums = [1,2,3,4];

typeof nums // object

nums.constructor === Array;// true

nums instanceof Array;// true

Object.prototype.toString.call(nums);// "[object Array]"

/////////////////////

<1> typeof

语法:

typeof value;

//支持6个值

"string"   "number"   "object"   "boolean"   "function"   "undefined"

例子:

console.log(typeof "123");// "string"
console.log(typeof 123);// "number"
console.log(typeof {});// "object"
console.log(typeof []);// "object"
console.log(typeof null);// "object"
console.log(typeof true);// "boolean"
console.log(typeof function(){});// "function"
console.log(typeof undefined);// "undefined"

/////////////////////

<2> instanceof

语法:

value instanceof ?;

例子:

var obj = {
	name : "kylin",
	age : 21,
	list : [1,2,3]
}

var Person = function(name,age){
	this.name = name;
	this.age = age;
}

var p = new Person("kylin", 21);
console.log(p instanceof Person); //true
console.log(obj instanceof Person); //false
console.log(obj instanceof Object); //true

console.log(new Date() instanceof Date); //true
console.log([] instanceof Array); //true

/////////////////////

<3> constructor

语法:

value.constructor === ?;

例子:

var Person = function(name,age){
	this.name = name;
	this.age = age;
}

var p = new Person("kylin", 21);
console.log(p.constructor == Person); //true

console.log([].constructor == Array); //true
console.log(new Date().constructor == Date)//true

/////////////////////

<4> Object.prototype.toString.call()

语法:

Object.prototype.toString.call(value);

例子:

Object.prototype.toString.call("123");// "[object String]"
Object.prototype.toString.call(123);// "[object Number]"
Object.prototype.toString.call({});// "[object Object]"
Object.prototype.toString.call([]);// "[object Array]"
Object.prototype.toString.call(null);// "[object Null]"
Object.prototype.toString.call(true);// "[object Boolean]"
Object.prototype.toString.call(function(){});// "[object Function]"
Object.prototype.toString.call(undefined);// "[object Undefined]"

时间: 2024-10-25 06:27:55

JavaScript 基本数据类型 与类型检测的相关文章

JavaScript数据类型、类型检测函数——慕课网ArraysSimilar编程练习

基本类型 string number boolean function undefined object (null,Array,Date,window) 隐式转换与"==""===" num-string   var str=num+' ' string-num   var num=str-0 "=="进行隐式转换后判断(即判断变量里面的值) "==="直接判断(判断是不是一个东西) ( NaN!=NaN null===nu

数据类型及类型检测

> 本篇文章内容:- ECMAScript数据类型有哪些- 基本数据类型(也叫简单数据类型)中的undefined和null的区别与联系- typeOf()函数判断基本数据类型- instanceof用于判断引用数据类型- Object.prototype.toString.call()检测数据类型的通用方法- 扩展constructor属性检测数据类型方式以及数组进行类型检测时需注意的事项 ### *ECMAScript有几种数据类型?* ECMAScript中有5种简单数据类型(也称为基本数

说说javascript变量类型和变量类型检测

javascript是一种弱类型语言,它的典型例子就是即变量在使用的时候可以给它赋值任何类型.那么先来看下javascript都有那些变量类型已经它们的使用方法吧. 先来看看javascript都有那些类型吧: string --- 字符串number --- 数值boolean --- 布尔值undefined --- 未申明的变量 或 申明并未赋值null --- 空object  --- 对象function  --- 函数 这里比较有争议的是 function 类型到底要不要归属到变量类

JavaScript安全的类型检测

在JavaScript中,内置的类型检测机制并非是完全可靠的.这里分别指的typeof和instanceof关键字. 由于typeof有一些无法预知的行为,经常会导致检测数据类型时得到不靠谱的结果,Safari在对正则表达式应用typeof时会返回"function",在chrome下回返回"object". instanceof存在多个全局作用域的情况下(指的是一个页面中包含iframe),也是问题多多.比如下面的代码: var isArray = value i

JS-安全检测JavaScript基本数据类型和内置对象的方法

前言:在前端开发中经常会需要用到检测变量数据类型的需求,比如:判断一个变量是否为undefined或者null来进行下一步的操作,今天在阅读“编写高质量代码-改善JavaScript程序的188个建议”这本书的时候看到这个比较好的方法,在此小记一笔以备在以后的开发中使用. 1:如下所示是我编写的演示代码 <!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <title>I

javascript 类型检测

javascript类型检测主要包括下面几个方法: typeofinstanceofObject.prototype.toStringconstructorduck type 一.typeof方法 typeof可以检测给定变量的数据类型,对一个值使用typeof操作符可能返回下列某个字符串: “undefined”  如果这个值未定义 “boolean”     如果这个值是布尔值 "string"        如果这个值是字符串 “number”     如果这个值是数值 “obj

Javascript数据类型&mdash;&mdash;number类型

        ECMAScript规范中使用IEEE754格式来表示整数和浮点数.支持十进制.八进制以及十六进制.有一点注意的是八进制数字在严格模式下是无效的,这可能会影响到程序的正常运行. 避免浮点数等值判断:       众所周知,基于IEEE754进行数据计算会产生舍入误差,最为经典的例子: 0.1+0.2 = 0.30000000000000004 ; 0.15+0.15 = 0.3;        在实际开发中应尽量避免使用浮点数的等值判断. NaN:      关于NaN有两点特别

JavaScript中类型检测

JavaScript是类型松散的,也就是说,在使用变量和函数参数之前,不会对它们进行比较已确保它们的数据类型正确. JS有五种基本数据类型:Undefined.Null.Boolean.Number和String,还有一种复杂数据类型Object. JS是不支持任何创建自定义类型的机制,所有值最终都将是上述6种数据类型之一. 对于上述6种类型的变量,可以利用typeof操作符来检测. typeof操作符可能返回下列六个字符串: "undefined"--这个值未定义,对应Undefin

Javascript之类型检测

一.检测原始(基本数据:字符串.数字.布尔.null.undefined)类型. 用typeof检测原始类型:1.对于字符串,typeof返回"string"; 2.对于数字,typeof返回"number"; 3.对于布尔型,typeof返回"boolean"; 4.对于undefined,typeof返回"undefined"; 5.对于null,typeof返回"object". 所以检测前面四种类型