フロントエンド経典面接問題:jsデータタイプ
10976 ワード
JavaScriptデータタイプ
万丈のビルの平地から、変化しないでその宗を離れないで、堅固な基本的な功は研究開発者にとってかなり重要で、この文はよくある面接問題から着手して、文字の思惟の導図の形式でJavaScriptのデータのタイプを総括して、たまにこの文を読んで、補欠を調べて、印象を深めることができます.
面接問題の導入
jsにはどのような種類のデータがありますか?基本的なデータの種類は何ですか?
5 s思い出
回答前のナレーション:
万丈のビルの平地から、変化しないでその宗を離れないで、堅固な基本的な功は研究開発者にとってかなり重要で、この文はよくある面接問題から着手して、文字の思惟の導図の形式でJavaScriptのデータのタイプを総括して、たまにこの文を読んで、補欠を調べて、印象を深めることができます.
面接問題の導入
jsにはどのような種類のデータがありますか?基本的なデータの種類は何ですか?
5 s思い出
回答前のナレーション:
, (data) :
(scalar), (string) (number), " " 。
(sequence), , (array) (List), " , "。
(mapping), / (Name/value), , , (hash) (dictionary), " : "。
json:
Douglas Crockford :
1) (",")
2) (":")
3) ( ) ("[]")
4) ( ) ("{}")
:" 16800 , 1600 。 6400 , 1800 。"
=> [
{" ":" "," ":16800," ":1600},
{" ":" "," ":6400," ":1800}
]
カテゴリ: ( 、 ):
:
undefined
: “ ” 、 , NaN
:
,
, , undefined
, undefined
null
: “ ” 、 , 0
: , , null
:typeof(null) 'object'
boolean
: “ ”(true) “ ”(false)
:
: && ,||
: !
:===,!==,==,!=
:>,>=, true
:
, JavaScript 64 , 32
0.1 + 0.2 === 0.3, (0.3 - 0.2) === (0.2 - 0.1) => false
IEEE 754:
1 : ,0 ,1
2 12 : (11 )
13 64 : ( )
:-(2e53-1) 2e53-1,
: 2e11-1 => 2047
:2e1024 2e-1023,
: 1024 => Infinity
: -1023 => 0
:Number.MAX_VALUE => 1.7976931348623157e+308
:Number.MIN_VALUE => 5e-324
35( ) 0xFF( )
123e3 => 123000,123e-3 => 0.123
21
5
: 0
: 0o 0O , 0、 0-7
: 0x 0X
: 0b 0B
:+0 -0 ,
1 / +0 => +Infinity
1 / -0 => -Infinity
NaN
:“ ”(Not a Number)
:
5 - 'x' => NaN
Math.acos(2) => NaN
Math.log(-1) => NaN
Math.sqrt(-1) => NaN
0 / 0 => NaN
:
NaN === NaN => false
[NaN].indexOf(NaN) => -1
Boolean(NaN) => false
NaN + 32 => NaN
:
isNaN(NaN) => true
: ,
:
NaN
,typeof NaN => 'number'
Infinity
:
, ,
0 0, Infinity
:
isFinite: , , Infinity
isFinite(Infinity) => false,isFinite(NaN) => false,isFinite(-1) => true
parseInt()
parseFloat()
Number
toString , 。
toLocaleString , 。
toFixed , 。
toExponential 。
toPrecision 。
valueOf Number 。
string
: (\) ,
:
:'\251' => "©"
:'\xA9' => "©"
:'\u00A9' => "©"
,
:Array.prototype.join.call(s, ' ')
length
Unicode
Base64
,
btoa(): Base64
atob():Base64
ASCII ( ) Base64 :
btoa(encodeURIComponent(str))
String :
anchor() HTML 。
big() 。
blink() 。
bold() 。
charAt() 。
charCodeAt() Unicode 。
concat() 。
fixed() 。
fontcolor() 。
fontsize() 。
fromCharCode() 。
indexOf() 。
italics() 。
lastIndexOf() 。
link() 。
localeCompare() 。
match() 。
replace() 。
search() 。
slice() , 。
small() 。
split() 。
strike() 。
sub() 。
substr() 。
substring() 。
sup() 。
toLocaleLowerCase() 。
toLocaleUpperCase() 。
toLowerCase() 。
toUpperCase() 。
toSource() 。
toString() 。
valueOf() 。
:
1) ,
2)
3) typeof
( ):
:
object:
:
(1)“ ” 。
、 、 , 、 、 “ ”。 “ ”, “ ” , , “ ” 。
(2)“ ” , “ ”(property) “ ”(method)。
“ ”, ; “ ”, ( )。 , animal ,“ ” ,“ ” ( 、 、 )。
:
(object)
var o1 = {};
var o2 = new Object();
var o3 = Object.create(null);
,
,
, , 。
:. []
:. []
:Object.keys(o);
:delete
:in
:for...in
(enumerable) ,
+
with
Object
(0)Object.keys(),Object.getOwnPropertyNames()
(1)
Object.getOwnPropertyDescriptor(): attributes 。
Object.defineProperty(): attributes , 。
Object.defineProperties(): attributes , 。
Object.getOwnPropertyNames(): 。
(2)
Object.preventExtensions(): 。
Object.isExtensible(): 。
Object.seal(): 。
Object.isSealed(): 。
Object.freeze(): 。
Object.isFrozen(): 。
(3)
Object.create(): , 。
Object.getPrototypeOf(): Prototype 。
Object
valueOf(): 。
toString(): 。
toLocaleString(): 。
hasOwnProperty(): , 。
isPrototypeOf(): 。
propertyIsEnumerable(): 。
(array)
: ,
length
32 , , 2e32 - 1
:length
:length=0
arguments, call
in
length
delete
forEach 、for...in 、 Object.keys
Array.isArray(a)
concat() , 。
join() 。 。
pop()
push() , 。
reverse() 。
shift()
slice()
sort()
splice() , 。
toSource() 。
toString() , 。
toLocaleString() , 。
unshift() , 。
valueOf()
(function)
:
1) ,
2) ( )
3) instanceof
es6 :
symbol
:
:obj = Symbol(desc)
:typeof(Symbol) => symbol
:
Symbol, 。 , , Symbol 。 Symbol , , 。
Symbol new ,Symbol , , Symbol 。
Symbol , 。 , , Symbol ,Symbol 。
Symbol , for…in、for…of , Object.keys()、Object.getOwnPropertyNames() 。 , , Object.getOwnPropertySymbols , Symbol 。
Symbol.for , Symbol 。 , Symbol , Symbol 。 ,Symbol 。
:
var a = Symbol('foo');
var b = Symbol('foo');
var s1 = Symbol.for('foo');
var s2 = Symbol.for('foo');
s1 === s2 => true
a === b => false
a === s2 => false
Symbol.keyFor(s1) => "foo"
Symbol.keyFor(a) => undefined
:
Symbol.hasInstance
。 instanceof 。
Symbol.isConcatSpreadable
, Array.concat 。
Symbol.iterator
。 for…of 。
Symbol.toPrimitive
。 ToPrimitive 。
Symbol.toStringTag
, 。 Object.toString 。
Symbol.unscopables
, with 。
データタイプ変換:
Number()
: , NaN
Number(false) => 0
Number(true) => 1
Number(undefined) => NaN
Number(null) => 0
Number("1.2") => 1.2
Number("12") => 12
Number("1.2.3") => NaN
Number(new object()) => NaN
Number(50) => 50
Number({}) => NaN
String()
: 。
: 。
:true "true",false "false"。
undefined: "undefined"。
null: "null"。
String({a: 1}) => "[object Object]"
String([1, 2, 3]) => "1,2,3"
Boolean()
false
undefined
null
-0
0 +0
NaN
false
''
true
, {}、 new Boolean(false)
:
123 + 'abc' => "123abc"
if ('abc')
( “+” “-”)
+ {foo: 'bar'} => NaN
:
, number、string、boolean
データタイプ検出: typeof
、 、 、undefined、 , number、string、boolean、undefined、function
, object
typeof window => "object"
typeof {} => "object"
typeof [] => "object"
typeof null => "object"
instanceof
: ,
: ,
v instanceof Vehicle Vehicle.prototype.isPrototypeOf(v)
instanceof , , true
:Object.create(null) instanceof Object => false,
:instanceof ,
Object.prototype.toString(value)
Object.prototype.toString.call(value);
: [object Number]。
: [object String]。
: [object Boolean]。
undefined: [object Undefined]。
null: [object Null]。
: [object Array]。
arguments : [object Arguments]。
: [object Function]。
Error : [object Error]。
Date : [object Date]。
RegExp : [object RegExp]。
: [object " + + "]
転載先:https://juejin.im/post/5c6e3daaf265da2db91267a0